377 Commits

Author SHA1 Message Date
Daniel Lemire
e20c952456
Merge pull request #320 from toughengineer/int_multiplication_by_power_of_10
Implemented multiplication of integer by a power of 10
2025-09-18 07:48:09 -06:00
Daniel Lemire
bb956b29db release candidate 8.0.3 2025-09-18 07:44:53 -06:00
Daniel Lemire
48fc5404d4 compatibility fix 2025-09-18 07:44:05 -06:00
InvalidUsernameException
9d81c71aef Do not mis-parse certain wide-character emojis as integer
When calling ch_to_digit() with a UTF-16 or UTF-32 code unit, it simply
truncates away any data stored in the non-low byte(s) of the code unit.
It then uses a lookup table to determine whether the low byte
corresponds to an ASCII digit. This is incorrect because as soon as any
bit outside the low byte is set, the number will never correspond to a
ASCII digit anymore.

To fix this, we produce a mask that is all zeroes if any bit outside the
low byte is set in the code unit, all ones otherwise. Anding this mask
with the original code unit forces the table lookup to return the
sentinel value from the zero-index if any high bit was set and causes
the code unit not to be parsed as integer.

This bug was discovered when loading Mastodon posts inside the Ladybird
browser where some of Mastodon's JavaScript would trigger the code path
that erroneously parsed the emoji as integer. It had the visible effect
that some digits inside the posts would get rendered as one of the
emojis that parsed to that digit. For more details see this issue:
https://github.com/LadybirdBrowser/ladybird/issues/6205

The emojis in the test case are simply all the emojis used on Mastodon
that caused the bug. They can be found here:
06803422da/app/javascript/mastodon/features/emoji/emoji_map.json
2025-09-15 23:12:28 +02:00
WenLei
6677924083 float_common.h: Support RISC-V 2025-09-11 11:11:30 +08:00
Pavel Novikov
0a230326ab
now finally got the anti-ambiguity overloads right, right? 2025-09-06 02:22:43 +03:00
Pavel Novikov
7ae62ee0d5
finally got the anti-ambiguity overloads right? 2025-09-06 02:10:55 +03:00
Pavel Novikov
e12463583f
added lacking overloads to avoid potential ambiguity 2025-09-06 00:12:41 +03:00
Pavel Novikov
20a7383442
renamed the function, cleaned up return type 2025-09-05 13:36:23 +03:00
Daniel Lemire
42db9ac1de
Merge branch 'main' into P2497R0 2025-09-03 12:04:36 -04:00
Pavel Novikov
6be07d66a8
inlining Clinger's fast path because why not,
and it seems to bring performance to the level before the changes somewhat
2025-09-03 16:59:40 +03:00
Daniel Lemire
c0582c27f5 typos in the comments 2025-09-02 17:29:12 -04:00
Pavel Novikov
a134561e4b
added missing inline specifiers 2025-09-02 23:03:38 +03:00
Pavel Novikov
7b8f04500a
implemented multiplication of integer by power of 10 2025-09-02 13:20:36 +03:00
Daniel Lemire
81b8306c5f implementation of https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2497r0.html 2025-05-19 18:08:36 -04:00
Daniel Lemire
50a80a73ab v8.0.2 2025-03-11 09:51:53 -04:00
Daniel Lemire
1bf7010153 v8.0.1 2025-03-10 09:04:05 -04:00
Daniel Lemire
c6732cd28b lint 2025-03-10 09:02:38 -04:00
Daniel Lemire
b29208f93d adding FASTFLOAT_IF_CONSTEXPR17 2025-03-09 17:10:55 -04:00
Daniel Lemire
6f0049a2e7 lint 2025-03-09 15:14:52 -04:00
Daniel Lemire
95dedd0aed turning json option into macro parameter 2025-03-09 15:13:43 -04:00
Joao Paulo Magalhaes
3e9dc96eb4 Fix -Wundef warnings seen in gcc 4.8 and 4.9 2025-02-13 08:45:11 +00:00
Joao Paulo Magalhaes
9cfa5ff4a0 fix warnings from -Wundef 2025-02-12 23:51:44 +00:00
Daniel Lemire
77cc847c84 pushing version change 2025-02-08 11:49:58 -05:00
Daniel Lemire
7a5ee5af60
Merge pull request #296 from dalle/dalle/float16
16-bit float support
2025-02-06 19:41:37 -05:00
Daniel Lemire
1d50f57dd9 better wording. 2025-02-06 00:16:28 -05:00
Johan Råde
d4d5748ec8 Silenced Visual Studio compiler warning
This code caused a C4127 "conditional expression is constant" compiler warning
when compiled with Visual Studio at warning level 4 with T a signed integer type.
2025-01-16 16:12:34 +01:00
Anders Dalvander
ce274f7051 include and order types largerst to smallest 2024-12-04 10:17:05 +01:00
Anders Dalvander
7226c00490 cleanup 2024-12-04 09:35:32 +01:00
Anders Dalvander
2a6c2604b5 check for IEEE 754 compliance 2024-12-04 09:34:34 +01:00
Anders Dalvander
62f526dfd3 fix -Werror=conversion 2024-12-03 23:52:57 +01:00
Anders Dalvander
da819feb74 back to std::bit_cast 2024-12-03 23:23:35 +01:00
Anders Dalvander
8cee025082 add powers_of_ten/max_mantissa for float16_t/bfloat16_t 2024-12-03 23:23:34 +01:00
Daniel Lemire
6f8fd6728d make it build 2024-12-03 23:23:34 +01:00
Daniel Lemire
bfcff49c83 16-bit float support 2024-12-03 23:23:34 +01:00
Anders Dalvander
3775a81ced formatted code 2024-12-01 16:39:28 +01:00
Anders Dalvander
0a1bf11560 harmonize ifdef checks 2024-12-01 16:36:45 +01:00
Anders Dalvander
3146e686d0 introduce equiv_uint_t 2024-12-01 16:36:17 +01:00
Anders Dalvander
d3f7113d6e add char8_t support 2024-11-23 10:21:48 +01:00
Anders Dalvander
1a15c66fb9 harmonize files to use "east const"
manually checked modified files for errors, but not committing .clang-format due to the following warning:
>>> Setting `QualifierAlignment` to something other than `Leave`, COULD lead to incorrect code formatting due to incorrect decisions made due to clang-formats lack of complete semantic information. As such extra care should be taken to review code changes made by the use of this option.
2024-11-23 09:46:18 +01:00
Anders Dalvander
7f476cd259 fix clang unused-function warning 2024-11-23 09:04:46 +01:00
Daniel Lemire
cf771eaa83
Merge pull request #283 from dalle/issue282-better-error-messages
Better compile time error messages for unsupported types
2024-11-22 13:09:49 -05:00
Anders Dalvander
35d0c8c179 add version macros 2024-11-22 16:44:56 +01:00
Anders Dalvander
74829bb77d better compile time error messages for unsupported types 2024-11-22 16:25:31 +01:00
Anders Dalvander
50ee38af65 fix for fastfloat_strncasecmp for wchar_t and larger char types 2024-11-21 00:09:05 +01:00
Anders Dalvander
7ff885d45c fix for is_space for wchar_t and larger char types 2024-11-21 00:09:00 +01:00
Anders Dalvander
48252a6483 check feature macros in once place 2024-11-21 00:08:19 +01:00
Anders Dalvander
0bbba960f4 move from feature macros to format flags 2024-11-21 00:06:08 +01:00
Anders Dalvander
b3526da935 uint64_t as enum base for chars_format 2024-11-20 23:01:56 +01:00
Anders Dalvander
b8b5da75a5 enum class chars_format 2024-11-20 09:33:16 +01:00
Anders Dalvander
b635dec11a clang format 2024-11-19 10:32:37 +01:00
Anders Dalvander
23787fc71a fix #276: parse_infnan handles FASTFLOAT_ALLOWS_LEADING_PLUS correctly 2024-11-17 16:23:01 +01:00
Anders Dalvander
72b2a7382a const ness 2024-11-17 16:22:05 +01:00
Anders Dalvander
269867fa43 spelling 2024-11-17 16:17:35 +01:00
Evgeny Karpov
c9f8339668 Fix the formatting and remove the previous condition 2024-09-02 18:13:01 +02:00
Evgeny Karpov
2609d5fd4b The patch resolves GCC compilation issues for the C++ language targeting
aarch64-w64-mingw32.

More information could be found here:
https://gcc.gnu.org/pipermail/gcc-patches/2024-September/662020.html
2024-09-02 17:24:33 +02:00
Yedidya Feldblum
159589d356 remove out-of-line defns of constexpr static data members under c++17
Address warnings of this form under c++17 when building with `-Werror -Wdeprecated`:
```
fast_float/float_common.h:446:58: error: out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated [-Werror,-Wdeprecated]
constexpr double binary_format_lookup_tables<double, U>::powers_of_ten[];
                                                         ^
```
2024-08-30 10:30:40 -05:00
Daniel Lemire
5ad6aae0b1 lint 2024-08-14 09:57:47 -04:00
Leszek Swirski
74e3c29215 Include intrin.h for __umulh
Arm64 uses __umulh, so add the same condition for including the intrin.h
header.
2024-08-14 15:10:14 +02:00
Daniel Lemire
d57ca3da1f
Merge pull request #259 from fastfloat/issue258
issue 258
2024-08-03 16:38:10 -04:00
Daniel Lemire
207d66162a issue 258 2024-08-03 10:02:42 -04:00
Leszek Swirski
b6ce2c4de6 Record parse failure reason and location
In parse_number_string, if there is a parse error, report the specific
error as one of the values in a new parse_error enum, and update
lastmatch to match the error location. This allows users of the library
to print more helpful error messages for invalid inputs.
2024-07-23 18:11:10 +02:00
Leszek Swirski
e6777f2eef Allow JSON empty exponent as trailing junk
Revert #251, and instead allow an invalid trailing empty exponent to be
treated as junk data in JSON parsing. Expand the test suite to test this
case, including testing the trailing junk.
2024-07-23 14:56:42 +02:00
Daniel Lemire
ef9a60d516 update CI to ubuntu 24 + safe a shift value to a variable (for elegance) 2024-07-22 09:36:14 -04:00
Leszek Swirski
b57207c811 Disallow empty exponent in JSON parsing
The JSON spec requires at least one digit in the exponential part, if
specified.
2024-07-22 12:34:58 +02:00
Daniel Lemire
92c79d078b
Merge pull request #249 from zejal/main
from_chars_advanced overload function taking parsed_number_string_t
2024-07-16 10:17:08 -04:00
Daniel Lemire
c8b3ca0d12
Merge pull request #167 from deadalnix/smallest_power_of_ten
Change smallest_power_of_ten to -64 for floats.
2024-06-27 19:03:59 -04:00
zejal
85911abb59 added couple of comments 2024-05-13 19:55:46 +02:00
zejal
1f9b1a6706 from_chars_advanced overload function taking parsed_number_string_t 2024-05-13 14:24:48 +02:00
Daniel Lemire
56a0092895 removing unused function 2024-03-20 14:24:16 -04:00
Matthew Wozniczka
9ab4ac837b
Add a missing check that __uint128_t exists before using it.
I noticed a compilation error when building a 64-bit binary with this library while using xlclang on AIX, and this change seems to fix it.
2024-03-16 12:18:20 -07:00
Marcin Wojdyr
55a5b3c8e1 check C++ standard version before including <stdfloat>
fixes #238
2024-02-03 15:05:30 +01:00
Daniel Lemire
12ece3c84f removing leftover print 2024-01-28 15:20:41 -05:00
Daniel Lemire
a0ea962bf5 more fixes 2024-01-28 15:18:40 -05:00
Daniel Lemire
eb584f748e explicit cast 2024-01-28 13:29:55 -05:00
Daniel Lemire
9da74ca5fb minor fixes 2024-01-28 12:49:00 -05:00
Daniel Lemire
fade2357ba fix missing typename 2024-01-28 11:46:27 -05:00
Daniel Lemire
c7e45fea9f
Merge pull request #229 from MTahaK/main
Support for float32_t and float64_t
2024-01-28 11:43:54 -05:00
Daniel Lemire
1d97749791 Verify and fix issue 235 2024-01-28 10:47:21 -05:00
Daniel Lemire
620376ad39
Merge branch 'main' into main 2024-01-28 10:09:56 -05:00
Darrell Wright
b43f808190
Update float_common.h
The construct !! is a no-op for a bool, op< for uint64_t's.  Removed it and made it an explicit cast to match the operations being performed
2023-12-27 19:43:56 -05:00
Maya Warrier
882a716c12
Explicit curly bracket where suggested
Co-authored-by: Daniel Lemire <daniel@lemire.me>
2023-12-14 16:28:23 -05:00
Maya Warrier
a59a62cb5c
Merge branch 'fastfloat:main' into main 2023-12-13 17:54:05 -05:00
Maya Warrier
bdee16bcad - Add SIMD acceleration to fast_int
- fix MSVC warning
2023-12-13 17:42:30 -05:00
Maya Warrier
36aaded3dd Fix handling of leading zeros 2023-12-13 17:11:41 -05:00
Maya Warrier
1e0a9da538 Change FASTLOAT_ARM64 macro to FASTFLOAT_NEON 2023-12-13 00:56:35 -05:00
MTahaK
96c0059fe9 Revised implementation of float32_t and float64_t support as template specializations, added test 2023-12-13 00:33:16 -05:00
Maya Warrier
a30fe866f6 Fix bugs highlighted in tests 2023-12-12 22:35:58 -05:00
Maya Warrier
624ba49434 Fix more Werrors
- Werror=conversion,char-subscripts
2023-12-12 21:26:48 -05:00
MTahaK
4d8a2f4000 Fixed typo. 2023-12-12 19:02:10 -05:00
MTahaK
f330ec1e9d Reverted CMakeLists changes, modifed workflow for g++13 & C++23. 2023-12-12 18:59:59 -05:00
MTahaK
d10980bc9f Added conditions to include stdfloat, and new workflow for GCC 13 2023-12-12 18:46:38 -05:00
MTahaK
62a4129a1c Fixed ifdef macro 2023-12-12 18:18:13 -05:00
MTahaK
eb844a1ad9 Modified cmakelist to use C++23. Fixed ifdef for fixed-width float types 2023-12-12 18:16:27 -05:00
MTahaK
cbbbc75c88 Fixed ifdef checks (incorrect syntax) 2023-12-12 17:59:04 -05:00
MTahaK
d8dbbc54ab Updated comment for float32_t and float64_t conversions in from_chars 2023-12-12 17:56:14 -05:00
MTahaK
f74e338e0a Added trivial support for float32_t and float64_t 2023-12-12 16:38:48 -05:00
Maya Warrier
7a21a8d6d7 Return invalid_argument in more places 2023-12-12 02:36:18 -05:00
Maya Warrier
3d446f1eba Fix gcc werrors 2023-12-12 01:56:24 -05:00
Maya Warrier
c9527c2e4f Skip leading zeros 2023-12-11 04:27:22 -05:00