Quaternion type: Difference between revisions

Content added Content deleted
(→‎{{header|Julia}}: condensed code)
(→‎{{header|Julia}}: more cleanup)
Line 2,786: Line 2,786:
q3::T
q3::T
end
end

Quaternion{A<:Real,B<:Real,C<:Real,D<:Real}(q0::A,q1::B,q2::C,q3::D) =
Quaternion(promote(q0,q1,q2,q3)...)


convert{T}(::Type{Quaternion{T}}, x::Real) =
convert{T}(::Type{Quaternion{T}}, x::Real) =
Quaternion(convert(T,x), convert(T,0), convert(T,0), convert(T,0))
Quaternion(convert(T,x), zero(T), zero(T), zero(T))
convert{T}(::Type{Quaternion{T}}, z::Complex) =
convert{T}(::Type{Quaternion{T}}, z::Complex) =
Quaternion(convert(T,real(z)), convert(T,imag(z)), convert(T,0), convert(T,0))
Quaternion(convert(T,real(z)), convert(T,imag(z)), zero(T), zero(T))
convert{T}(::Type{Quaternion{T}}, z::Quaternion) =
convert{T}(::Type{Quaternion{T}}, z::Quaternion) =
Quaternion(convert(T,z.q0), convert(T,z.q1),
Quaternion(convert(T,z.q0), convert(T,z.q1), convert(T,z.q2), convert(T,z.q3))
convert(T,z.q2), convert(T,z.q3))


promote_rule{T,S}(::Type{Complex{T}}, ::Type{Quaternion{S}}) =
promote_rule{T,S}(::Type{Complex{T}}, ::Type{Quaternion{S}}) = Quaternion{promote_type(T,S)}
Quaternion{promote_type(T,S)}
promote_rule{S}(::Type{Bool}, ::Type{Quaternion{S}}) = Quaternion{S}
promote_rule{S}(::Type{Bool}, ::Type{Quaternion{S}}) = Quaternion{S}
promote_rule{T<:Real,S}(::Type{T}, ::Type{Quaternion{S}}) =
promote_rule{T<:Real,S}(::Type{T}, ::Type{Quaternion{S}}) = Quaternion{promote_type(T,S)}
Quaternion{promote_type(T,S)}
promote_rule{T,S}(::Type{Quaternion{T}}, ::Type{Quaternion{S}}) = Quaternion{promote_type(T,S)}


function show(io::IO, z::Quaternion)
function show(io::IO, z::Quaternion)