nfx-datatypes 0.1.1
Cross-platform C++ library with high-precision Int128 and Decimal datatypes
Loading...
Searching...
No Matches
benchmark Directory Reference

Detailed Description

Benchmarks


Test Environment

Hardware Configuration

Component Specification
Computer Model Lenovo ThinkPad P15v Gen 3
CPU 12th Gen Intel Core i7-12800H (20 logical, 14 physical cores)
Base Clock 2.80 GHz
Turbo Clock 4.80 GHz
L1 Data Cache 48 KiB (×6 P-cores) + 32 KiB (×8 E-cores)
L1 Instruction Cache 32 KiB (×6 P-cores) + 64 KiB (×2 E-core clusters)
L2 Unified Cache 1.25 MiB (×6 P-cores) + 2 MiB (×2 E-core clusters)
L3 Unified Cache 24 MiB (×1 shared)
RAM DDR4-3200 (32GB)
GPU NVIDIA RTX A2000 4GB GDDR6

Software Configuration

Platform OS Benchmark Framework C++ Compiler nfx-datatypes Version
Linux LMDE 7 Google Benchmark v1.9.4 GCC 14.2.0-x64 v0.1.0
Linux LMDE 7 Google Benchmark v1.9.4 Clang 19.1.7-x64 v0.1.0
Windows Windows 10 Google Benchmark v1.9.4 MinGW GCC 14.2.0-x64 v0.1.0
Windows Windows 10 Google Benchmark v1.9.4 Clang-GNU-CLI 19.1.5-x64 v0.1.0
Windows Windows 10 Google Benchmark v1.9.4 Clang-MSVC-CLI 19.1.5-x64 v0.1.0
Windows Windows 10 Google Benchmark v1.9.4 MSVC 19.44.35217.0-x64 v0.1.0

Performance Results

Decimal Operations

Construction Benchmarks

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Construct Default 0.210 ns 0.212 ns 0.292 ns 0.460 ns 0.283 ns 0.715 ns
Construct from Int32 0.210 ns 0.210 ns 0.291 ns 0.471 ns 0.457 ns 0.921 ns
Construct from Int64 0.211 ns 0.209 ns 0.285 ns 0.474 ns 0.276 ns 0.921 ns
Construct from Uint32 0.212 ns 0.209 ns 0.292 ns 0.500 ns 0.435 ns 0.924 ns
Construct from Uint64 0.212 ns 0.209 ns 0.289 ns 0.476 ns 0.283 ns 0.921 ns
Construct from Float 66.4 ns 65.8 ns 176 ns 157 ns 92.1 ns 77.4 ns
Construct from Double 61.3 ns 58.9 ns 180 ns 146 ns 87.2 ns 73.2 ns
Construct from Int128 1.17 ns 1.61 ns 1.37 ns 8.37 ns 5.02 ns 1.88 ns
Copy Construct 0.223 ns 0.210 ns 0.301 ns 0.476 ns 0.264 ns 0.711 ns

Arithmetic Operations

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Addition 26.3 ns 44.3 ns 27.9 ns 195 ns 112 ns 69.8 ns
Subtraction 22.1 ns 30.2 ns 22.9 ns 144 ns 75.3 ns 51.6 ns
Multiplication 61.1 ns 43.9 ns 151 ns 802 ns 435 ns 338 ns
Multiplication Large 68.1 ns 43.8 ns 73.2 ns 578 ns 345 ns 235 ns
Division 41.9 ns 45.8 ns 62.8 ns 645 ns 375 ns 471 ns
Division High Precision 37.7 ns 42.8 ns 53.1 ns 298 ns 169 ns 215 ns
Unary Minus 0.479 ns 0.229 ns 0.384 ns 0.670 ns 0.345 ns 0.732 ns
Addition Assignment 26.2 ns 44.6 ns 27.3 ns 197 ns 114 ns 71.5 ns
Subtraction Assignment 22.4 ns 30.8 ns 22.9 ns 143 ns 77.4 ns 51.6 ns
Multiplication Assignment 61.5 ns 53.6 ns 150 ns 816 ns 449 ns 345 ns
Division Assignment 41.9 ns 46.2 ns 59.4 ns 670 ns 392 ns 500 ns

Parsing Operations

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Parse Integer 10.5 ns 9.81 ns 13.2 ns 110 ns 61.4 ns 26.1 ns
Parse Small Decimal 18.0 ns 17.3 ns 22.9 ns 138 ns 75.0 ns 33.0 ns
Parse Large Decimal 50.8 ns 43.4 ns 64.2 ns 628 ns 345 ns 126 ns
Parse High Precision 53.3 ns 45.0 ns 67.0 ns 656 ns 360 ns 144 ns
Parse Negative 36.3 ns 29.0 ns 45.5 ns 381 ns 225 ns 88.9 ns
FromString Valid 24.2 ns 19.7 ns 28.9 ns 209 ns 120 ns 44.9 ns
FromString Invalid 5.09 ns 4.90 ns 6.63 ns 12.0 ns 6.63 ns 12.6 ns

Conversion & Formatting

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
ToDouble 13.6 ns 12.6 ns 18.0 ns 110 ns 60.0 ns 14.4 ns
ToBits 0.607 ns 0.467 ns 0.600 ns 0.952 ns 0.547 ns 1.43 ns
ToString Integer 19.1 ns 16.4 ns 46.0 ns 100 ns 54.4 ns 44.5 ns
ToString Small 35.1 ns 34.2 ns 69.8 ns 148 ns 80.2 ns 64.2 ns
ToString Large 35.6 ns 40.4 ns 69.8 ns 148 ns 80.2 ns 61.4 ns
ToString Negative 177 ns 128 ns 267 ns 408 ns 215 ns 209 ns

Comparison Operations

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Equality Decimal 2.42 ns 6.08 ns 3.28 ns 15.7 ns 8.89 ns 8.20 ns
LessThan Decimal 2.41 ns 2.33 ns 3.05 ns 18.4 ns 10.0 ns 8.02 ns
GreaterThan Decimal 2.62 ns 2.56 ns 3.37 ns 20.9 ns 11.7 ns 9.00 ns
Equality Int32 2.73 ns 9.00 ns 3.60 ns 21.5 ns 12.0 ns 8.20 ns
Equality Int64 2.82 ns 6.28 ns 3.61 ns 16.5 ns 9.42 ns 8.37 ns
Equality Uint64 5.52 ns 11.7 ns 6.56 ns 43.0 ns 24.6 ns 18.4 ns
Equality Double 66.8 ns 58.8 ns 181 ns 105 ns 58.6 ns 68.0 ns
LessThan Double 72.7 ns 71.0 ns 180 ns 164 ns 92.1 ns 87.9 ns
Equality Float 71.8 ns 67.6 ns 180 ns 153 ns 87.9 ns 81.6 ns
Equality Int128 4.55 ns 5.88 ns 2.10 ns 30.7 ns 17.3 ns 10.3 ns
LessThan Int128 10.7 ns 15.9 ns 9.00 ns 87.2 ns 48.7 ns 31.5 ns

State Checking Operations

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
IsZero (Zero) 1.19 ns 1.05 ns 2.01 ns 2.29 ns 1.28 ns 1.93 ns
IsZero (NonZero) 0.237 ns 0.233 ns 0.285 ns 0.439 ns 0.251 ns 0.698 ns
IsNegative (Negative) 0.722 ns 0.860 ns 1.35 ns 2.20 ns 1.26 ns 1.76 ns
IsNegative (Positive) 3.58 ns 7.27 ns 4.08 ns 35.3 ns 19.0 ns 12.0 ns

Mathematical Operations

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Abs Positive 4.06 ns 7.69 ns 4.17 ns 33.0 ns 18.0 ns 11.5 ns
Abs Negative 1.20 ns 1.13 ns 1.69 ns 2.41 ns 1.38 ns 1.99 ns
Truncate 94.0 ns 90.2 ns 129 ns 879 ns 544 ns 586 ns
Floor 92.0 ns 90.5 ns 127 ns 854 ns 547 ns 594 ns
Ceiling 99.5 ns 92.6 ns 129 ns 1067 ns 698 ns 872 ns
Round 96.2 ns 92.6 ns 129 ns 858 ns 562 ns 586 ns
Sqrt 384 ns 381 ns 600 ns 3149 ns 2040 ns 2511 ns
Sqrt Perfect Sqr 23.5 ns 33.3 ns 57.2 ns 107 ns 65.6 ns 60.9 ns
Sqrt Large 2138 ns 2674 ns 2762 ns 16113 ns 10010 ns 12277 ns

Free Functions

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
abs() Positive 4.14 ns 7.70 ns 4.17 ns 30.0 ns 18.8 ns 11.7 ns
abs() Negative 1.23 ns 1.15 ns 1.73 ns 2.30 ns 1.40 ns 2.05 ns
sqrt() 389 ns 379 ns 572 ns 2982 ns 1995 ns 2550 ns
round() 96.0 ns 92.5 ns 123 ns 820 ns 562 ns 600 ns
floor() 94.1 ns 90.2 ns 123 ns 785 ns 544 ns 586 ns
ceil( ) 100 ns 92.6 ns 129 ns 977 ns 684 ns 858 ns
trunc( ) 94.5 ns 90.1 ns 120 ns 767 ns 547 ns 586 ns

Formatting Operations

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Format 205 ns 164 ns 305 ns 283 ns 188 ns 225 ns
Format Negative 206 ns 166 ns 305 ns 276 ns 186 ns 215 ns

Property Accessors & Constants

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
GetScale 0.212 ns 0.213 ns 0.283 ns 0.361 ns 0.251 ns 0.750 ns
DecimalPlacesCount 4.95 ns 2.54 ns 5.78 ns 4.50 ns 3.15 ns 3.05 ns
Constant MinValue 0.213 ns 0.210 ns 0.283 ns 0.353 ns 0.246 ns 1.00 ns
Constant MaxValue 0.212 ns 0.209 ns 0.276 ns 0.345 ns 0.251 ns 1.00 ns

Int128 Operations

Construction Benchmarks

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Construct Default 0.210 ns 0.211 ns 0.225 ns 0.246 ns 0.239 ns 0.670 ns
Construct from Int32 0.210 ns 0.346 ns 0.220 ns 0.256 ns 0.246 ns 0.670 ns
Construct from Int64 0.209 ns 0.210 ns 0.220 ns 0.240 ns 0.240 ns 0.670 ns
Construct from Uint64 0.209 ns 0.217 ns 0.220 ns 0.246 ns 0.246 ns 0.663 ns
Construct from TwoWords 0.209 ns 0.210 ns 0.220 ns 0.235 ns 0.241 ns 0.670 ns
Construct from Float 2.49 ns ** 1.62 ns** 2.83 ns 8.20 ns 8.37 ns 9.63 ns
Construct from Double 323 ns 322 ns 516 ns 711 ns 715 ns 753 ns
Construct from Decimal 6.36 ns 14.9 ns 7.15 ns 24.0 ns 25.1 ns 21.9 ns
Copy Construct 0.210 ns 0.209 ns 0.225 ns 0.225 ns 0.241 ns 0.663 ns

Arithmetic Operations

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Addition 0.210 ns 0.209 ns 0.220 ns 0.544 ns 0.572 ns 0.698 ns
Subtraction 0.210 ns 0.209 ns 0.220 ns 0.575 ns 0.572 ns 0.645 ns
Multiplication 0.209 ns 0.209 ns 0.220 ns 1.95 ns 2.20 ns 2.51 ns
Multiplication Large 0.209 ns 0.210 ns 0.225 ns 1.97 ns 2.29 ns 2.49 ns
Division 0.209 ns 0.235 ns 0.220 ns 5.58 ns 6.28 ns 6.42 ns
Division Large 0.214 ns 0.209 ns 0.220 ns 123 ns 157 ns 195 ns
Modulo 0.243 ns 0.210 ns 0.220 ns 7.53 ns 7.85 ns 8.02 ns
Unary Minus 0.210 ns 0.265 ns 0.215 ns 0.942 ns 0.977 ns 0.684 ns

Parsing Operations

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Parse Small Number 3.25 ns 2.77 ns 3.30 ns 4.24 ns 4.30 ns 5.31 ns
Parse Medium Number 27.6 ns 23.2 ns 29.6 ns 40.1 ns 42.4 ns 33.0 ns
Parse Large Number 47.5 ns 55.6 ns 76.7 ns 90.0 ns 103 ns 75.0 ns
Parse Negative Number 49.0 ns 40.7 ns 53.1 ns 68.0 ns 78.5 ns 54.4 ns
FromString Valid 48.3 ns 40.4 ns 50.0 ns 68.4 ns 76.7 ns 54.4 ns
FromString Invalid 1.39 ns 1.62 ns 1.61 ns 2.18 ns 2.41 ns 2.83 ns

Conversion & Formatting

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
ToLow 0.105 ns 0.210 ns 0.112 ns 0.215 ns 0.240 ns 0.684 ns
ToHigh 0.105 ns 0.209 ns 0.106 ns 0.218 ns 0.246 ns 0.663 ns
ToBits 0.209 ns 0.209 ns 0.215 ns 0.222 ns 0.241 ns 0.698 ns
ToString Small 20.9 ns 22.6 ns 48.7 ns 50.8 ns 53.1 ns 47.6 ns
ToString Medium 188 ns 226 ns 314 ns 345 ns 345 ns 314 ns
ToString Large 432 ns 556 ns 1046 ns 1200 ns 1294 ns 1123 ns
ToString Negative 438 ns 585 ns 1088 ns 1283 ns 1283 ns 1172 ns

Comparison Operations

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Equality Int128 0.105 ns 0.210 ns 0.115 ns 0.215 ns 0.240 ns 0.684 ns
LessThan Int128 0.105 ns 0.211 ns 0.117 ns 1.14 ns 1.20 ns 0.684 ns
GreaterThan Int128 0.105 ns 0.210 ns 0.117 ns 1.38 ns 1.44 ns 0.663 ns
Equality Int64 0.105 ns 0.209 ns 0.112 ns 0.215 ns 0.241 ns 0.670 ns
LessThan Int64 0.105 ns 0.209 ns 0.115 ns 0.215 ns 0.240 ns 0.684 ns
Equality Uint64 0.105 ns 0.210 ns 0.112 ns 0.214 ns 0.235 ns 0.684 ns
Equality Double 0.105 ns 0.210 ns 0.112 ns 4.24 ns 4.55 ns 2.89 ns
LessThan Double 0.105 ns 0.210 ns 0.115 ns 3.52 ns 3.77 ns 2.83 ns
Equality Float 0.105 ns 0.209 ns 0.115 ns 4.24 ns 4.50 ns 2.83 ns
Equality Decimal 4.50 ns 7.28 ns 4.65 ns 14.4 ns 15.7 ns 11.0 ns
LessThan Decimal 4.10 ns 6.32 ns 4.76 ns 14.1 ns 15.4 ns 11.1 ns

State Checking Operations

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
IsZero (Zero) 0.105 ns 0.209 ns 0.114 ns 0.215 ns 0.234 ns 0.680 ns
IsZero (NonZero) 0.105 ns 0.210 ns 0.114 ns 0.210 ns 0.240 ns 0.684 ns
IsNegative (Negative) 0.105 ns 0.209 ns 0.115 ns 0.215 ns 0.244 ns 0.684 ns
IsNegative (Positive) 0.105 ns 0.209 ns 0.114 ns 0.213 ns 0.241 ns 0.684 ns

Mathematical Operations

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Abs Positive 0.209 ns 0.209 ns 0.235 ns 1.29 ns 1.34 ns 0.684 ns
Abs Negative 0.209 ns 0.210 ns 0.235 ns 1.57 ns 1.60 ns 0.684 ns
isqrt Small 14.1 ns 16.3 ns 46.0 ns 42.4 ns 51.6 ns 51.6 ns
isqrt Large 15.7 ns 16.4 ns 47.1 ns 600 ns 670 ns 984 ns
sqrt Perfect 12.0 ns 13.0 ns 36.1 ns 31.4 ns 35.3 ns 36.8 ns
sqrt NonPerf 20.0 ns 24.8 ns 46.0 ns 42.4 ns 51.6 ns 51.6 ns

Free Functions

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
abs() 0.210 ns 0.209 ns 0.240 ns 1.29 ns 1.34 ns 0.684 ns
isqrt() 14.5 ns 16.3 ns 51.6 ns 43.9 ns 51.6 ns 51.6 ns
sqrt() 20.0 ns 24.8 ns 60.0 ns 55.8 ns 58.6 ns 61.4 ns

Formatting Operations

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Format 358 ns 432 ns 750 ns 900 ns 872 ns 837 ns

Updated on November 22, 2025