diff --git a/src/Quadmath.jl b/src/Quadmath.jl index 0d2b8d7..660ad48 100644 --- a/src/Quadmath.jl +++ b/src/Quadmath.jl @@ -349,7 +349,12 @@ Base.Integer(x::Float128) = Int(x) @assume_effects :foldable Base.rem(x::Float128, y::Float128) = Float128(@quad_ccall(@autoql(remainder)(x::Cfloat128, y::Cfloat128)::Cfloat128)) -sincos(x::Float128) = (sin(x), cos(x)) +function sincos(x::Float128) + sin = Ref{Cfloat128}() + cos = Ref{Cfloat128}() + @quad_ccall(@autoql(sincos)(x::Cfloat128, sin::Ref{Cfloat128}, cos::Ref{Cfloat128})::Cvoid) + return (Float128(sin[]), Float128(cos[])) +end ## misc diff --git a/test/runtests.jl b/test/runtests.jl index 4d60ead..1926700 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -143,6 +143,9 @@ end if !Sys.iswindows() @test fma(x,x,Float128(-1.0)) ≈ Float128(1) end + @test sin(x) ≈ sin(xd) + @test cos(x) ≈ cos(xd) + @test all(sincos(x) .≈ (sin(x), cos(x))) end @testset "complex" begin x = sqrt(ComplexF128(1.0 + 1.0im))