@@ -8,6 +8,272 @@ and this project adheres to
8
8
9
9
## [ Unreleased]
10
10
11
+ ## [ 0.2.12] ( https://github.com/rust-lang/libm/compare/libm-v0.2.11...libm-v0.2.12 ) - 2025-04-15
12
+
13
+ ### Other
14
+
15
+ - Implement rounding for the hex float parsing and prepare to improve error handling
16
+ - Add assembly version of simple operations on aarch64
17
+ - Resolve small errors identified by recent clippy
18
+ - Replace calls to ` core::arch ` intrinsics with assembly
19
+ - Upgrade all dependencies to the latest
20
+ - Gate another assertion behind ` compiler-builtins `
21
+ - Configure out remaining formatting when ` compiler-builtins ` is set
22
+ - Ignore unused variables when ` compiler-builtins ` is set
23
+ - Resolve monomorphization errors in ` compiler-builtins `
24
+ - Make the compiler-builtins test more accurately mirror compiler-builtins
25
+ - Pin the nightly toolchain for aarch64 jobs
26
+ - Use ` git ls-files ` rather than manually globbing for tidy
27
+ - Make ` fma ` a trait method on ` Float `
28
+ - fma refactor 3/3: combine ` fma ` public API with its implementation
29
+ - fma refactor 2/3: move math/generic/fma.rs to math/fma.rs
30
+ - fma refactor 1/3: remove math/fma.rs
31
+ - Scale test iteration count at a later point
32
+ - Add a way to print inputs on failure
33
+ - Rename ` Float::exp ` to ` Float::ex `
34
+ - Check exact values for specified cases
35
+ - Add ` roundeven{,f,f16,f128} `
36
+ - Fix parsing of negative hex float literals in util
37
+ - Increase allowed offset from infinity for ynf
38
+ - Add ` fminimum ` , ` fmaximum ` , ` fminimum_num ` , and ` fmaximum_num `
39
+ - Combine ` fmin{,f,f16,f128} ` and ` fmax{,f,f16,128} ` into a single file
40
+ - Small refactor of bigint tests
41
+ - Eliminate the use of ` force_eval! ` in ` ceil ` , ` floor ` , and ` trunc `
42
+ - Migrate away from nonfunctional ` fenv ` stubs
43
+ - Introduce a trait constant for the minimum positive normal value
44
+ - Implement ` u256 ` with two ` u128 ` s rather than ` u64 `
45
+ - Pin the nightly toolchain for i686-pc-windows-gnu
46
+ - Increase the tolerance for ` jn ` and ` yn `
47
+ - Replace an ` assert! ` with ` debug_assert! ` in ` u256::shr `
48
+ - Change how operators are ` black_box ` ed
49
+ - Add simple icount benchmarks for ` u256 ` operations
50
+ - Decrease the allowed error for ` cbrt `
51
+ - Port the CORE-MATH version of ` cbrt `
52
+ - Add an enum representation of rounding mode
53
+ - Work arouind iai-callgrind apt failures
54
+ - Uncomment some hex float tests that should work now
55
+ - Convert ` fmaf ` to a generic implementation
56
+ - Remove or reduce the scope of ` allow(unused) ` where possible
57
+ - fix exponent calculation for subnormals
58
+ - Check more subnormal values during edge cases tests
59
+ - Run standard tests before running integration tests
60
+ - Add better edge case testing for ` scalbn `
61
+ - Add ` fmaf128 `
62
+ - Make it possible to use ` hf32! ` and similar macros outside of ` libm `
63
+ - Improve tidy output
64
+ - Add an integration test that verifies a list of cases
65
+ - Switch ` musl ` to track ` master `
66
+ - Ensure zero has the correct sign
67
+ - Print the hex float format upon failure
68
+ - Commonize the signature for all instances of ` get_test_cases `
69
+ - Start converting ` fma ` to a generic function
70
+ - Add checks via annotation that lists are sorted or exhaustive
71
+ - Do not add ` libm_helper.rs ` to the sources list
72
+ - Add a check in the ` shared.rs ` that the function list is sorted
73
+ - Add ` scalbnf16 ` , ` scalbnf128 ` , ` ldexpf16 ` , and ` ldexpf128 `
74
+ - Fix hex float trait recursion problem
75
+ - Rename ` EXP_MAX ` to ` EXP_SAT `
76
+ - Specify license as just MIT
77
+ - also print the hex float format for outputs
78
+ - Introduce a wrapper type for IEEE hex float formatting
79
+ - Support parsing NaN and infinities from the ` hf* ` functions
80
+ - Revert "Temporarily pin ` indicatif ` to 0.17.9"
81
+ - Temporarily pin ` indicatif ` to 0.17.9
82
+ - Switch musl from a script download to a submodule
83
+ - Ignore specific ` atan2 ` and ` sin ` tests on i586
84
+ - Rework the available Cargo profiles
85
+ - Remove remnants of the ` checked ` feature
86
+ - Use ` remquo ` from Rug
87
+ - Use ` frexp ` from Rug
88
+ - Use ` az ` exported from Rug
89
+ - Upgrade all dependencies to the latest version
90
+ - Enable missing icount benchmarks
91
+ - Add ` fmodf128 `
92
+ - Add way to override the number of iterations for specific tests
93
+ - Increase or set CI timeouts
94
+ - Add ` fmodf16 ` using the generic implementation
95
+ - Add a generic version of ` fmod `
96
+ - Add ` fminf16 ` , ` fmaxf16 ` , ` fminf128 ` , and ` fmaxf128 `
97
+ - Add a generic version of ` fmin ` and ` fmax `
98
+ - Remove an outdated note about precision
99
+ - Add ` roundf16 ` and ` roundf128 `
100
+ - Add a generic version of ` round `
101
+ - Add a generic version of ` scalbn `
102
+ - Change ` from_parts ` to take a ` u32 ` exponent rather than ` i32 `
103
+ - Introduce XFAILs that assert failure
104
+ - Add ` hf16! ` and ` hf128! `
105
+ - Fix the parsing of three-item tuples in ` util `
106
+ - Add the ability to parse hex, binary, and float hex with util
107
+ - Add ` rintf16 ` and ` rintf128 `
108
+ - Add a generic version of ` rint `
109
+ - Adjust ` ceil ` style to be more similar to ` floor `
110
+ - Add ` floorf16 ` and ` floorf128 `
111
+ - Add a generic version of ` floor `
112
+ - Add ` ceilf16 ` and ` ceilf128 `
113
+ - Add a generic version of ` ceil `
114
+ - Make ` Float::exp ` return an unsigned integer
115
+ - Shift then mask, rather than mask then shift
116
+ - Add ` sqrtf16 ` and ` sqrtf128 `
117
+ - Copy the u256 implementation from compiler_builtins
118
+ - Port the most recent version of Musl's ` sqrt ` as a generic algorithm
119
+ - Enable ` force-soft-floats ` for extensive tests
120
+ - Don't set ` opt_level ` in the musl build script
121
+ - Add a retry to the musl download
122
+ - Remove trailing whitespace in scripts, run JuliaFormatter
123
+ - Ignore files relevant to benchmarking
124
+ - Add a way to ignore benchmark regression checks
125
+ - Run wall time benchmarks with ` --features force-soft-floats `
126
+ - Run icount benchmarks once with softfloat and once with hardfloat
127
+ - Switch to the arm-linux runner and enable MPFR
128
+ - Remove the limit for querying a baseline
129
+ - Add an xfail for recent ynf failures
130
+ - Reduce the warm up and measurement time for ` short-benchmarks `
131
+ - Run iai-callgrind benchmarks in CI
132
+ - Add benchmarks using iai-callgrind
133
+ - Provide a way to override iteration count
134
+ - Increase the CI timeout
135
+ - Adjust precision and add xfails based on new tests
136
+ - Replace ` HasDomain ` to enable multi-argument edge case and domain tests
137
+ - Add an override for a recent failure
138
+ - Pass --max-fail to nextest so it doesn't fail fast
139
+ - Slightly restructure ` ci/calculate-exhaustive-matrix.py `
140
+ - Change ` .yml ` files to the canonical extension ` .yaml `
141
+ - Use cargo-nextest for running tests in CI
142
+ - Simplify and optimize ` fdim ` ([ #442 ] ( https://github.com/rust-lang/libm/pull/442 ) )
143
+ - Reduce indentation in ` run.sh ` using early return
144
+ - Don't set ` codegen-units=1 ` by default in CI
145
+ - Add ` fdimf16 ` and ` fdimf128 `
146
+ - Add a generic version of ` fdim `
147
+ - Format the MPFR manual implementation list
148
+ - Disable ` util ` and ` libm-macros ` for optimized tests
149
+ - Add ` truncf16 ` and ` truncf128 `
150
+ - Add a generic version of ` trunc `
151
+ - Add a utility crate for quick evaluation
152
+ - Enable ` build-mpfr ` and ` build-musl ` by default
153
+ - Rename the ` test-multiprecision ` feature to ` build-mpfr `
154
+ - Introduce arch::aarch64 and use it for rint{,f}
155
+ - Use wasm32 arch intrinsics for rint{,f}
156
+ - Add a new precision adjustment for i586 ` exp2f `
157
+ - Add a new precision adjustment for i586 ` rint `
158
+ - Expose C versions of ` libm ` functions in the ` cb ` crate
159
+ - Always use the same seed for benchmarking
160
+ - Add ` biteq ` and ` exp_unbiased ` to ` Float `
161
+ - Add a ` release-checked ` profile with debug and overflow assertions
162
+ - Remove ` ExpInt ` from ` Float ` , always use ` i32 ` instead
163
+ - Reorder tests in ` run.sh `
164
+ - Split ` cast ` into ` cast ` and ` cast_lossy `
165
+ - Use ` core::arch::wasm ` functions rather than intrinsics
166
+ - Add tests against MPFR for ` remquo ` and ` remquof `
167
+ - Account for optimization levels other than numbers
168
+ - Make extensive tests exhaustive if there are enough iterations available
169
+ - Increase the allowed ULP for ` tgammaf `
170
+ - Replace "intrinsic" config with "arch" config
171
+ - Don't use intrinsics abs for ` f16 ` and ` f128 ` on wasm32
172
+ - Remove an unused ` feature = "force-soft-floats" ` gate
173
+ - Switch from using ` unstable-intrinsics ` to ` intrinsics_enabled `
174
+ - Increase the allowed precision for failing tests on i586
175
+ - Enable MPFR tests on i586
176
+ - Only update the github ref for pull requests
177
+ - Loosen precision on i586 based on new tests
178
+ - Add an override for failing ceil/floor tests on i586
179
+ - Add domain and edge case tests to musl
180
+ - Add test infrastructure for ` f16 ` and ` f128 `
181
+ - Add ` fabsf16 ` , ` fabsf128 ` , ` copysignf16 ` , and ` copysignf128 `
182
+ - Enable ` f16 ` and ` f128 ` when creating the API change list
183
+ - Run extensive tests in CI when relevant files change
184
+ - Update precision based on failures from extensive tests
185
+ - Add extensive and exhaustive tests
186
+ - Add more detailed definition output for ` update-api-list.py `
187
+ - Add tests against MPFR for ` ilogb ` and ` ilogbf `
188
+ - Increase the precision for ` jn ` and ` jnf `
189
+ - Rename ` unstable-test-support ` to ` unstable-public-internals `
190
+ - Update precision based on new test results
191
+ - Rewrite the random test generator
192
+ - Add an iterator that ensures known size
193
+ - Streamline the way that test iteration count is determined
194
+ - Add a way for tests to log to a file
195
+ - Add tests against MPFR for ` scalbn{f} ` and ` ldexp{f} `
196
+ - Add tests against MPFR for ` frexp ` and ` frexpf `
197
+ - Add tests against MPFR for ` modf ` and ` modff `
198
+ - Clean up integers stored in ` MpTy `
199
+ - Sort ` ilogb ` with other precise operations
200
+ - Change to exhaustive matching for ` default_ulp `
201
+ - Use intrinsics for ` abs ` and ` copysign ` when available
202
+ - Rename generic ` abs ` to ` fabs `
203
+ - Always emit ` f16_enabled ` and ` f128_enabled ` attributes
204
+ - Add missing functions to the macro list
205
+ - Use ` rustdoc ` output to create a list of public API
206
+ - Forward the ` CI ` environment variable when running in Docker
207
+ - Remove lossy casting in ` logspace `
208
+ - Set the allowed FMA ULP to 0
209
+ - Don't run ` push ` CI on anything other than ` master `
210
+ - Use ` CheckCtx ` in more places
211
+ - Move ` CheckBasis ` and ` CheckCtx ` to a new ` run_cfg ` module
212
+ - Add ` ALL ` , ` from_str ` and ` math_op ` to ` Identifier `
213
+ - Add new trait implementations for ` Identifier ` and ` BaseName `
214
+ - Include ` shared.rs ` in ` libm_test::op `
215
+ - Move the macro's input function list to a new module ` shared `
216
+ - Add a way to plot the output from generators
217
+ - Update allowed precision to account for new tests
218
+ - Add tests for edge cases
219
+ - Add interfaces and tests based on function domains
220
+ - Introduce a float extension trait and some numerical routines
221
+ - Add an 8-bit float type for testing purposes
222
+ - Remove an ` is_nan ` workaround that is no longer needed
223
+ - Update and slightly refactor some of the ` Float ` trait
224
+ - Always enable ` unstable-float ` in CI
225
+ - Add ` f16 ` and ` f128 ` configuration from ` compiler-builtins `
226
+ - Introduce generic ` abs ` and ` copysign `
227
+ - Change from ` -latest ` to named CI images
228
+ - Allow Clippy lints in ` compiler-builtins-smoke-test `
229
+ - Fix new ` clippy::precedence ` lints
230
+ - Replace string function name matching with enums where possible
231
+ - Rename associated type helpers, add ` OpITy `
232
+ - Introduce helper types for accessing trait items
233
+ - Fix a bug in ` abs_diff `
234
+ - Remove tests against system musl
235
+ - Use ` https: ` links in ` README.md `
236
+ - Move some numeric trait logic to default implementations
237
+ - Change the ` multiprec_ ` prefix to ` mp_ `
238
+ - Change default ULP to use enum matching
239
+ - Rename ` Name ` to ` Identifier ` to avoid some ambiguity of "name"
240
+ - Change the ` CheckCtx ` constructor to take a ` Name ` enum
241
+ - Correct the proc macro to emit ` pub ` functions
242
+ - Rework tests to make use of the new ` MathOp ` trait
243
+ - Introduce a ` op ` module with struct representations of each routine
244
+ - Adjust how the proc macro emits types and add an enum
245
+ - Fix clippy lints in ` crates/ ` and enable this on CI
246
+ - Resolve clippy errors in ` libm ` tests and check this in CI
247
+ - Add some more basic docstrings ([ #352 ] ( https://github.com/rust-lang/libm/pull/352 ) )
248
+ - Introduce ` hf32! ` and ` hf64! ` macros for hex float support
249
+ - Enable clippy for ` libm ` in CI
250
+ - Fix errors reported by Clippy in ` libm `
251
+ - Replace ` libm_test::{Float, Int} ` with ` libm::{Float, Int} `
252
+ - Expose the ` support ` module publicly with a test feature
253
+ - Update libm ` Float ` and ` Int ` with functions from the test traits
254
+ - Change prefixes used by the ` Float ` trait
255
+ - Check benchmarks in CI
256
+ - Remove ` libm-bench `
257
+ - Add benchmarks against musl libm
258
+ - add support for loongarch64-unknown-linux-gnu
259
+ - Rename ` canonical_name ` to ` base_name `
260
+ - Add float and integer traits from compiler-builtins
261
+ - Move architecture-specific code to ` src/math/arch `
262
+ - Update ` select_implementation ` to accept arch configuration
263
+ - Add an "arch" Cargo feature that is on by default
264
+ - Vendor ` cfg_if::cfg_if! `
265
+ - Update ` libm-test/build.rs ` to skip directories
266
+ - Rename the ` special_case ` module to ` precision ` and move default ULP
267
+ - Run tests against MPFR on CI where possible
268
+ - Add a test against MPFR using random inputs
269
+ - Create interfaces for testing against MPFR
270
+ - Combine the WASM CI job with the others
271
+ - Make use of ` select_implementation `
272
+ - Introduce a ` select_implementation ` macro
273
+ - Introduce ` math::arch::intrinsics `
274
+ - Replace ` feature = "unstable-intrinsics" ` with ` intrinsics_enabled `
275
+ - Move the existing "unstable" feature to "unstable-intrinsics"
276
+
11
277
## [ 0.2.11] ( https://github.com/rust-lang/libm/compare/libm-v0.2.10...libm-v0.2.11 ) - 2024-10-28
12
278
13
279
### Fixed
0 commit comments