🐙

コード書きの練習 四日目(フェアフィールドの公式の実装)

2023/04/29に公開

フェアフィールドの公式とは、西暦1年1月1日からの経過日数を求める公式です。詳細は http://hp.vector.co.jp/authors/VA007833/math_note/zeller_Fairfield.html をご確認ください。

やってみた

module Practice
using Test

function fairfield(year, month, day)
    if (month == 1 || month == 2)
        year = year - 1
        month = month + 12
    end

    365(year - 1) + floor(year / 4) - floor(year / 100) +
    floor(year / 400) +
    31 +
    28 +
    floor((306(month + 1) / 10)) - 122 + day
end

function main()
    @testset "西暦1年1月1日からの経過日数を求める" begin
        @test fairfield(1, 1, 1) == 1
        @test fairfield(1, 1, 2) == 2
        @test fairfield(1, 2, 1) == 32
        @test fairfield(1, 3, 1) == 60
        @test fairfield(1, 4, 1) == 91
        @test fairfield(5, 1, 1) == 1462
    end
end
end

if abspath(PROGRAM_FILE) == @__FILE__
    using .Practice

    Practice.main()
end

雑記

次回は、本丸のツェラーの公式を実装する予定です。

Discussion