Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

C++23 Floats #978

Merged
merged 53 commits into from
Jun 28, 2023
Merged

C++23 Floats #978

merged 53 commits into from
Jun 28, 2023

Conversation

mborland
Copy link
Member

A lot more explicit casting is required now because implicit conversions from promoted types or a higher rank suffix (e.g. 0.3L on an F64) are errors.

Questions:

  • In promotion I prioritize the fixed width type over the standard type (e.g. F64 before double). Is this how we want to proceed?
  • How much do we want to support bfloat16_t?

Here is the paper for easy reference.

@jzmaddock, @ckormanyos, @NAThompson

@jzmaddock
Copy link
Collaborator

I think you're correct to prefer the new named types given a tie: this is what the std specifies.

Question: what do we want to do about float16_t? It's an interchange format, and not normally a computation format. Do we really want to perform complex calculations on such a type given that the result may be meaningless? Any error bigger than 10^-4 will wipe out all the digits, and any result larger than 65519 will be +INF. On the other hand, the user has explicitly asked for that type, and we may be on hardware with specialised support for it!

@mborland
Copy link
Member Author

I think you're correct to prefer the new named types given a tie: this is what the std specifies.

Question: what do we want to do about float16_t? It's an interchange format, and not normally a computation format. Do we really want to perform complex calculations on such a type given that the result may be meaningless? Any error bigger than 10^-4 will wipe out all the digits, and any result larger than 65519 will be +INF. On the other hand, the user has explicitly asked for that type, and we may be on hardware with specialised support for it!

That was my concern with bfloat16_t. It has a larger range but a mere 8 bits of precision. blfloat was designed for ML where getting the order of magnitude correct is what matters. I think we can make most everything work for the 16 bit types but offer no real guarantees of accuracy.

@mborland mborland linked an issue Apr 25, 2023 that may be closed by this pull request
@mborland
Copy link
Member Author

Now that promotion is agreeable with the current CI system how much testing do we want to add @jzmaddock? Adding float32_t and float64_t to everything would add significant strain to the runners that support it. Maybe test either float and double or float32_t and float64_t, but not both? GCC 13.1 was released this morning so hopefully we see it in Ubuntu 22.04 repos soon.

@jzmaddock
Copy link
Collaborator

That's a good question, this explosion of types presents us with a problem!

I don't see any point in running say special function accuracy tests with both say a 64-bit double and float64_t.

I'm also not convinced that it's worth running any tests with float16_t or bfloat16_t, these are probably "use at your own risk" on account of their limited range and precision?

Now that the tests should hopefully be 128-bit float clean, we could start running accuracy tests for float128_t when long double is not 128-bit.

What we should also do at a minimum, is instantiate the concept-checks for these new types, so something like:

#define TEST_COMPLEX

#include "compile_test/instantiate.hpp"

int main(int argc, char* [])
{
   if(argc > 10000)
   {
      instantiate(float16_t(0));
      instantiate_mixed(float16_t(0));
   }
}

For each of these new types and see what fails. That would take care of the distributions and special functions, but not things like the integrators etc.

Once there are Mingw gcc-13 builds available I'll be able to help out a bit more, nothing yet though. No sign of msvc supporting these types just yet either :(

@mborland
Copy link
Member Author

That sounds reasonable to me. I think adding a disclaimer to the docs about the 16-bit types is about as far as we should go with it. I doubt MSVC rolls out support anytime soon since support is optional.

@mborland
Copy link
Member Author

mborland commented May 2, 2023

GCC 13.1 is now in the homebrew repos on Mac.

Revert this commit
@jzmaddock
Copy link
Collaborator

@mborland : hope you don't mind, but I pushed some fairly trivial fixes for MInw64.

Question: do we care about the blizzard of warnings generated by float32.cpp? And should we add float128.cpp?

@mborland
Copy link
Member Author

mborland commented May 15, 2023

@mborland : hope you don't mind, but I pushed some fairly trivial fixes for MInw64.

Question: do we care about the blizzard of warnings generated by float32.cpp? And should we add float128.cpp?

Feel free to make changes; I leave the branch open to maintainers so the you can. I hit a lot of errors when attempting float128.cpp. I think it is an alias to __float128 because there were a lot of complaints about the stream operators missing.

I think for the float32 warnings I would ignore them for now to get things working and then we'll have to go back more methodically. Any time a constant is a double converted to float32 you are going to get a warning. There are definitely going to be lots of instances of that throughout the codebase.

@mborland
Copy link
Member Author

@jzmaddock Drone now has an image for Ubuntu 23.04. I have it cycling, but it looks like we have a good runner for g++13.

@mborland
Copy link
Member Author

mborland commented Jun 5, 2023

test_autodiff_8 yields the following failures:

====== BEGIN OUTPUT ======
Running 3 test cases...
test_autodiff_8.cpp:19: error: in "test_autodiff_8/hermite_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:19: error: in "test_autodiff_8/hermite_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:19: error: in "test_autodiff_8/hermite_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:19: error: in "test_autodiff_8/hermite_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:19: error: in "test_autodiff_8/hermite_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:19: error: in "test_autodiff_8/hermite_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:19: error: in "test_autodiff_8/hermite_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:19: error: in "test_autodiff_8/hermite_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:19: error: in "test_autodiff_8/hermite_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed

*** 9 failures are detected in the test module "test_autodiff"

EXIT STATUS: 201
====== END OUTPUT ======
====== BEGIN OUTPUT ======
Running 15 test cases...
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float32>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:152: error: in "test_autodiff_8/laguerre_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed
test_autodiff_8.cpp:157: error: in "test_autodiff_8/laguerre_hpp<_Float64>": check isNearZero(autodiff_v.derivative(0u) - anchor_v) has failed

*** 36 failures are detected in the test module "test_autodiff"

EXIT STATUS: 201
====== END OUTPUT ======

And like test_autodiff_3 the *gamma functions all hang.

@mborland
Copy link
Member Author

All of the hanging tests have been fixed. The remaining errors are all out chebyshev:

====== BEGIN OUTPUT ======
Running 15 test cases...
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){9.01137447} exceeds 0.000476837%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){-6.32815123} exceeds 0.000476837%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){11920.7471} exceeds 0.000476837%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){-47441.875} exceeds 0.000476837%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){-30.7728882} exceeds 0.000476837%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){30.5897064} exceeds 0.000476837%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){-2991.96802} exceeds 0.000476837%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){11306.8506} exceeds 0.000476837%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){6270.69922} exceeds 0.000476837%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){-26684.5977} exceeds 0.000476837%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){-2.22408295} exceeds 0.000476837%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){1.00000012} exceeds 0.000476837%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){31569.1934} exceeds 0.000476837%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){-113594.961} exceeds 0.000476837%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){100.86644} exceeds 0.000476837%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){-293.264374} exceeds 0.000476837%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){286.204926} exceeds 0.000476837%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float32>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){-1172.71631} exceeds 0.000476837%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float64>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){5.7738043295308845} exceeds 8.88178e-13%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float64>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){-5.2053066497684393} exceeds 8.88178e-13%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float64>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){199.38248633817307} exceeds 8.88178e-13%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float64>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){-511.89720424407381} exceeds 8.88178e-13%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float64>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){-12046.956380678164} exceeds 8.88178e-13%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float64>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){38751.091796451481} exceeds 8.88178e-13%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float64>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){38422.404679082363} exceeds 8.88178e-13%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float64>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){-82928.550315927147} exceeds 8.88178e-13%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<_Float64>": difference{-nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_u(n, x){-3358.5034935958261} exceeds 8.88178e-13%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<_Float64>": difference{-nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){-nan} and boost::math::chebyshev_t_prime(n, x){7484.0733417252286} exceeds 8.88178e-13%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<boost__multiprecision__number<boost__multiprecision__backends__cpp_bin_float<50u_ (boost__multiprecision__backends__digit_base_type)10_ void_ int_ 0_ 0>_ (boost__multiprecision__expression_template_option)0>>": difference{nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){nan} and boost::math::chebyshev_u(n, x){-389.8814389225778180667792605005027122200855724130772} exceeds 4.27642e-47%
test_autodiff_5.cpp(67): error: in "test_autodiff_5/chebyshev_hpp<boost__multiprecision__number<boost__multiprecision__backends__cpp_bin_float<50u_ (boost__multiprecision__backends__digit_base_type)10_ void_ int_ 0_ 0>_ (boost__multiprecision__expression_template_option)0>>": difference{nan} between boost::math::chebyshev_t_prime(n, make_fvar<T, m>(x)).derivative(0u){nan} and boost::math::chebyshev_t_prime(n, x){603.1905345009690968940362923763626304892481824835757} exceeds 4.27642e-47%
test_autodiff_5.cpp(63): error: in "test_autodiff_5/chebyshev_hpp<boost__multiprecision__number<boost__multiprecision__backends__cpp_bin_float<50u_ (boost__multiprecision__backends__digit_base_type)10_ void_ int_ 0_ 0>_ (boost__multiprecision__expression_template_option)0>>": difference{nan} between boost::math::chebyshev_u(n, make_fvar<T, m>(x)).derivative(0u){nan} and boost::math::chebyshev_u(n, x){1} exceeds 4.27642e-47%

*** 31 failures are detected in the test module "test_autodiff"

EXIT STATUS: 201
====== END OUTPUT ======

@mborland mborland force-pushed the cpp23-float branch 5 times, most recently from 77a4fd9 to ad1fc87 Compare June 20, 2023 08:56
@mborland
Copy link
Member Author

@jzmaddock This is now down to a single concept failure in chebyshev. It should be a simple pow(cpp_dec_float, unsigned), but I am not quite sure what this issue is and I have tried casting to several types. Do you have any insight? The fail log is here: https://github.com/boostorg/math/actions/runs/5321186931/jobs/9635987566?pr=978#step:17:1839

@mborland mborland marked this pull request as ready for review June 21, 2023 14:27
@mborland
Copy link
Member Author

@jzmaddock With your commit this is now green across the board. Would you please give it another once over? Master branch closes next week for major changes.

@mborland
Copy link
Member Author

Ping @jzmaddock. Master closes for beta on Wednesday.

@mborland
Copy link
Member Author

The one CI failure left on this is a network error. I am going to merge this in because master closes for major changes today.

@mborland mborland merged commit 8bb0d16 into develop Jun 28, 2023
58 of 59 checks passed
@mborland mborland deleted the cpp23-float branch June 28, 2023 06:02
@mborland mborland mentioned this pull request Aug 23, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Fixed-width floating-point C++23 and <cstdfloat.hpp>
4 participants