From e64f1b525ebe204673bf80b8f4d877b0c54a4bf1 Mon Sep 17 00:00:00 2001 From: Fredrik Ekre Date: Thu, 24 Aug 2017 16:20:33 +0200 Subject: [PATCH] move irrational constants to its own module need to update tests so [ci skip] --- base/constants.jl | 96 +++++++++++++++++++++++++++++++++++++++++++++ base/exports.jl | 5 --- base/irrationals.jl | 93 +------------------------------------------ 3 files changed, 98 insertions(+), 96 deletions(-) create mode 100644 base/constants.jl diff --git a/base/constants.jl b/base/constants.jl new file mode 100644 index 0000000000000..44e2d968d8773 --- /dev/null +++ b/base/constants.jl @@ -0,0 +1,96 @@ +# This file is a part of Julia. License is MIT: https://julialang.org/license + +""" + Base.Constants + +Module containing the mathematical constants +π, e, γ, catalan and φ. +""" +module Constants + +export π, pi, e, eu, γ, eulergamma, catalan, φ, golden + +Base.@irrational π 3.14159265358979323846 pi +Base.@irrational e 2.71828182845904523536 exp(big(1)) +Base.@irrational γ 0.57721566490153286061 euler +Base.@irrational catalan 0.91596559417721901505 catalan +Base.@irrational φ 1.61803398874989484820 (1+sqrt(big(5)))/2 + +# aliases +""" + pi + π + +The constant pi. + +```jldoctest +julia> pi +π = 3.1415926535897... +``` +""" +π, const pi = π + +""" + e + eu + +The constant e. + +```jldoctest +julia> e +e = 2.7182818284590... +``` +""" +e, const eu = e + +""" + γ + eulergamma + +Euler's constant. + +```jldoctest +julia> eulergamma +γ = 0.5772156649015... +``` +""" +γ, const eulergamma = γ + +""" + φ + golden + +The golden ratio. + +```jldoctest +julia> golden +φ = 1.6180339887498... +``` +""" +φ, const golden = φ + +""" + catalan + +Catalan's constant. + +```jldoctest +julia> catalan +catalan = 0.9159655941772... +``` +""" +catalan + +# special behaviors + +# use exp for e^x or e.^x, as in +# ^(::Irrational{:e}, x::Number) = exp(x) +# but need to loop over types to prevent ambiguity with generic rules for ^(::Number, x) etc. +for T in (Irrational, Rational, Integer, Number) + Base.:^(::Irrational{:e}, x::T) = exp(x) +end + +Base.log(::Irrational{:e}) = 1 # use 1 to correctly promote expressions like log(x)/log(e) +Base.log(::Irrational{:e}, x::Number) = log(x) + +end diff --git a/base/exports.jl b/base/exports.jl index 96d860e7d6bb7..d3345d475dcdc 100644 --- a/base/exports.jl +++ b/base/exports.jl @@ -185,11 +185,6 @@ export NaN32, NaN64, im, - π, pi, - e, eu, - γ, eulergamma, - catalan, - φ, golden, I, # Operators diff --git a/base/irrationals.jl b/base/irrationals.jl index 27b94a5968903..bf867fa9eb44c 100644 --- a/base/irrationals.jl +++ b/base/irrationals.jl @@ -142,94 +142,5 @@ end big(x::Irrational) = convert(BigFloat,x) big(::Type{<:Irrational}) = BigFloat -## specific irrational mathematical constants - -@irrational π 3.14159265358979323846 pi -@irrational e 2.71828182845904523536 exp(big(1)) -@irrational γ 0.57721566490153286061 euler -@irrational catalan 0.91596559417721901505 catalan -@irrational φ 1.61803398874989484820 (1+sqrt(big(5)))/2 - -# aliases -""" - pi - π - -The constant pi. - -```jldoctest -julia> pi -π = 3.1415926535897... -``` -""" -π, const pi = π - -""" - e - eu - -The constant e. - -```jldoctest -julia> e -e = 2.7182818284590... -``` -""" -e, const eu = e - -""" - γ - eulergamma - -Euler's constant. - -```jldoctest -julia> eulergamma -γ = 0.5772156649015... -``` -""" -γ, const eulergamma = γ - -""" - φ - golden - -The golden ratio. - -```jldoctest -julia> golden -φ = 1.6180339887498... -``` -""" -φ, const golden = φ - -""" - catalan - -Catalan's constant. - -```jldoctest -julia> catalan -catalan = 0.9159655941772... -``` -""" -catalan - -# special behaviors - -# use exp for e^x or e.^x, as in -# ^(::Irrational{:e}, x::Number) = exp(x) -# but need to loop over types to prevent ambiguity with generic rules for ^(::Number, x) etc. -for T in (Irrational, Rational, Integer, Number) - ^(::Irrational{:e}, x::T) = exp(x) -end - -log(::Irrational{:e}) = 1 # use 1 to correctly promote expressions like log(x)/log(e) -log(::Irrational{:e}, x::Number) = log(x) - -# align along = for nice Array printing -function alignment(io::IO, x::Irrational) - m = match(r"^(.*?)(=.*)$", sprint(0, showcompact, x, env=io)) - m === nothing ? (length(sprint(0, showcompact, x, env=io)), 0) : - (length(m.captures[1]), length(m.captures[2])) -end +include("constants.jl") +using .Constants