要約 この短いコードで、西暦102499年までのうるう年を判定できます。このマジックナンバーはz3というSMTソルバーで見つけ出されました。 bool is_leap_year_fast(uint32_t y) { return ((y * 1073750999) & 3221352463) <= 126976; } はじめに GCC (libstdc++) のうるう年判定のアルゴリズムが、以下のように変更になりました (commit)。 constexpr bool is_leap() const noexcept { - return (_M_y & (_M_y % 25 == 0 ? 15 : 3)) == 0; + const auto __y = static_cast<uint32_t>(_M_y) + 32800u; + return ((__y * 1073750999u)



