@@ -8,7 +8,7 @@ import Base: (*), +, -, /, <, <=, ==, ^, convert,
88 significand_mask, exponent, significand,
99 promote_rule, widen,
1010 string, print, show, parse,
11- acos, acosh, asin, asinh, atan, atanh, cosh, cos,
11+ acos, acosh, asin, asinh, atan, atanh, cosh, cos, sincos,
1212 exp, expm1, log, log2, log10, log1p, sin, sinh, sqrt,
1313 tan, tanh,
1414 ceil, floor, trunc, round, fma,
@@ -41,7 +41,7 @@ macro ccall(expr)
4141
4242 expr_call = expr. args[1 ]
4343 @assert expr_call isa Expr && expr_call. head == :call
44-
44+
4545 expr_fname = expr_call. args[1 ]
4646
4747 if expr_fname isa Symbol
@@ -51,9 +51,9 @@ macro ccall(expr)
5151 end
5252
5353 expr_args = expr_call. args[2 : end ]
54-
55- @assert all (ex isa Expr && ex. head == :(:: ) for ex in expr_args)
56-
54+
55+ @assert all (ex isa Expr && ex. head == :(:: ) for ex in expr_args)
56+
5757 arg_names = [ex. args[1 ] for ex in expr_args]
5858 arg_types = [ex. args[2 ] for ex in expr_args]
5959
@@ -65,7 +65,7 @@ macro ccall(expr)
6565 r = Ref {Cfloat128} ()
6666 ccall ($ fname, Cvoid, (Ref{Cfloat128}, $ (esc .(arg_types)... ),), r, $ (esc .(arg_names)... ))
6767 r[]
68- end
68+ end
6969 else
7070 :(ccall ($ fname, $ (esc (ret_type)), ($ (esc .(arg_types)... ),), $ (esc .(arg_names)... )))
7171 end
@@ -345,11 +345,15 @@ hypot(x::Float128, y::Float128) =
345345 Float128 (@ccall (libquadmath. hypotq (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
346346atan (x:: Float128 , y:: Float128 ) =
347347 Float128 (@ccall (libquadmath. atan2q (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
348+ sincos (x:: Float128 ) = (sin (x), cos (x))
348349
349350# # misc
350- fma (x:: Float128 , y:: Float128 , z:: Float128 ) =
351- Float128 (@ccall (libquadmath. fmaq (x:: Cfloat128 , y:: Cfloat128 , z:: Cfloat128 ):: Cfloat128 ))
352-
351+ @static if ! Sys. iswindows ()
352+ # disable fma on Windows until rounding mode issue fixed
353+ # https://github.com/JuliaMath/Quadmath.jl/issues/31
354+ fma (x:: Float128 , y:: Float128 , z:: Float128 ) =
355+ Float128 (@ccall (libquadmath. fmaq (x:: Cfloat128 , y:: Cfloat128 , z:: Cfloat128 ):: Cfloat128 ))
356+ end
353357
354358isnan (x:: Float128 ) = 0 != @ccall (libquadmath. isnanq (x:: Cfloat128 ):: Cint )
355359isinf (x:: Float128 ) = 0 != @ccall (libquadmath. isinfq (x:: Cfloat128 ):: Cint )
@@ -366,8 +370,8 @@ precision(::Type{Float128}) = 113
366370eps (:: Type{Float128} ) = reinterpret (Float128, 0x3f8f_0000_0000_0000_0000_0000_0000_0000 )
367371floatmin (:: Type{Float128} ) = reinterpret (Float128, 0x0001_0000_0000_0000_0000_0000_0000_0000 )
368372floatmax (:: Type{Float128} ) = reinterpret (Float128, 0x7ffe_ffff_ffff_ffff_ffff_ffff_ffff_ffff )
369-
370373maxintfloat (:: Type{Float128} ) = Float128 (0x0002_0000_0000_0000_0000_0000_0000_0000 )
374+
371375"""
372376 Inf128
373377
0 commit comments