Attempt to fix C++20 'compliant' compilers that don't actually support <numbers>.

This commit is contained in:
Stephen Anthony 2024-05-13 21:00:15 -02:30
parent f9cd1f0dc5
commit 82c975fbae
2 changed files with 20 additions and 4 deletions

View File

@ -41,7 +41,6 @@
*/ */
#include <cmath> #include <cmath>
#include <numbers>
#include "OSystem.hxx" #include "OSystem.hxx"
#include "PropsSet.hxx" #include "PropsSet.hxx"
@ -463,8 +462,8 @@ Int32 HighScoresManager::convert(Int32 val, uInt32 maxVal, bool isBCD,
//maxVal += zeroBased ? 0 : 1; //maxVal += zeroBased ? 0 : 1;
maxVal -= zeroBased ? 1 : 0; maxVal -= zeroBased ? 1 : 0;
const Int32 bits = isBCD const Int32 bits = isBCD
? ceil(log(maxVal) / std::numbers::ln10 * 4) ? ceil(log(maxVal) / BSPF::ln10 * 4)
: ceil(log(maxVal) / std::numbers::ln2); : ceil(log(maxVal) / BSPF::ln2);
// limit to maxVal's bits // limit to maxVal's bits
val %= 1 << bits; val %= 1 << bits;

View File

@ -47,7 +47,6 @@ using uInt64 = uint64_t;
#include <functional> #include <functional>
#include <iomanip> #include <iomanip>
#include <memory> #include <memory>
#include <numbers>
#include <string> #include <string>
#include <string_view> #include <string_view>
#include <charconv> #include <charconv>
@ -59,6 +58,11 @@ using uInt64 = uint64_t;
#include <utility> #include <utility>
#include <vector> #include <vector>
// It seems not all C++20 implementations support this yet
#if __has_include(<numbers>)
#include <numbers>
#endif
using std::cin; using std::cin;
using std::cout; using std::cout;
using std::cerr; using std::cerr;
@ -117,8 +121,21 @@ static const string EmptyString("");
namespace BSPF namespace BSPF
{ {
#if __has_include(<numbers>)
static constexpr float PI_f = std::numbers::pi_v<float>; static constexpr float PI_f = std::numbers::pi_v<float>;
static constexpr double PI_d = std::numbers::pi_v<double>; static constexpr double PI_d = std::numbers::pi_v<double>;
static constexpr double ln10 = std::numbers::ln10;
static constexpr double ln2 = std::numbers::ln2;
#else
[[deprecated("C++20 implementation missing <numbers> support.")]]
static constexpr float PI_f = 3.141592653589793238462643383279502884F;
[[deprecated("C++20 implementation missing <numbers> support.")]]
static constexpr double PI_d = 3.141592653589793238462643383279502884;
[[deprecated("C++20 implementation missing <numbers> support.")]]
static constexpr double ln10 = 2.302585092994045684017991454684364208;
[[deprecated("C++20 implementation missing <numbers> support.")]]
static constexpr double ln2 = 0.693147180559945309417232121458176568;
#endif
// CPU architecture type // CPU architecture type
// This isn't complete yet, but takes care of all the major platforms // This isn't complete yet, but takes care of all the major platforms