module Data.Number.MPFR.Arithmetic
where
import Data.Number.MPFR.Internal
add :: RoundMode -> Precision -> MPFR -> MPFR -> MPFR
add r p d1 d2 = fst $ add_ r p d1 d2
addw :: RoundMode -> Precision -> MPFR -> Word -> MPFR
addw r p d1 d = fst $ addw_ r p d1 d
addi :: RoundMode -> Precision -> MPFR -> Int -> MPFR
addi r p d1 d = fst $ addi_ r p d1 d
sub :: RoundMode -> Precision -> MPFR -> MPFR -> MPFR
sub r p d1 d2 = fst $ sub_ r p d1 d2
subw :: RoundMode -> Precision -> MPFR -> Word -> MPFR
subw r p d1 d = fst $ subw_ r p d1 d
subi :: RoundMode -> Precision -> MPFR -> Int -> MPFR
subi r p d1 d = fst $ subi_ r p d1 d
wsub :: RoundMode -> Precision -> Word -> MPFR -> MPFR
wsub r p d d1 = fst $ wsub_ r p d d1
isub :: RoundMode -> Precision -> Int -> MPFR -> MPFR
isub r p d d1 = fst $ isub_ r p d d1
mul :: RoundMode -> Precision -> MPFR -> MPFR -> MPFR
mul r p d1 d2 = fst $ mul_ r p d1 d2
mulw :: RoundMode -> Precision -> MPFR -> Word -> MPFR
mulw r p d1 d = fst $ mulw_ r p d1 d
muli :: RoundMode -> Precision -> MPFR -> Int -> MPFR
muli r p d1 d = fst $ muli_ r p d1 d
sqr :: RoundMode -> Precision -> MPFR -> MPFR
sqr r p d = fst $ sqr_ r p d
div :: RoundMode -> Precision -> MPFR -> MPFR -> MPFR
div r p d1 d2 = fst $ div_ r p d1 d2
divw :: RoundMode -> Precision -> MPFR -> Word -> MPFR
divw r p d1 d = fst $ divw_ r p d1 d
divi :: RoundMode -> Precision -> MPFR -> Int -> MPFR
divi r p d1 d = fst $ divi_ r p d1 d
wdiv :: RoundMode -> Precision -> Word -> MPFR -> MPFR
wdiv r p d d1 = fst $ wdiv_ r p d d1
idiv :: RoundMode -> Precision -> Int -> MPFR -> MPFR
idiv r p d d1 = fst $ idiv_ r p d d1
sqrt :: RoundMode -> Precision -> MPFR -> MPFR
sqrt r p d = fst $ sqrt_ r p d
sqrtw :: RoundMode -> Precision -> Word -> MPFR
sqrtw r p d = fst $ sqrtw_ r p d
cbrt :: RoundMode -> Precision -> MPFR -> MPFR
cbrt r p d = fst $ cbrt_ r p d
root :: RoundMode -> Precision -> MPFR -> Word -> MPFR
root r p d n = fst $ root_ r p d n
pow :: RoundMode -> Precision -> MPFR -> MPFR -> MPFR
pow r p d1 d2 = fst $ pow_ r p d1 d2
poww :: RoundMode -> Precision -> MPFR -> Word -> MPFR
poww r p d1 d2 = fst $ poww_ r p d1 d2
powi :: RoundMode -> Precision -> MPFR -> Int -> MPFR
powi r p d1 d2 = fst $ powi_ r p d1 d2
wpoww :: RoundMode -> Precision -> Word -> Word -> MPFR
wpoww r p d1 d2 = fst $ wpoww_ r p d1 d2
wpow :: RoundMode -> Precision -> Word -> MPFR -> MPFR
wpow r p d1 d2 = fst $ wpow_ r p d1 d2
neg :: RoundMode -> Precision -> MPFR -> MPFR
neg r p d = fst $ neg_ r p d
absD :: RoundMode -> Precision -> MPFR -> MPFR
absD r p d = fst $ absD_ r p d
dim :: RoundMode -> Precision -> MPFR -> MPFR -> MPFR
dim r p d1 d2 = fst $ dim_ r p d1 d2
mul2w :: RoundMode -> Precision -> MPFR -> Word -> MPFR
mul2w r p d1 d2 = fst $ mul2w_ r p d1 d2
mul2i :: RoundMode -> Precision -> MPFR -> Int -> MPFR
mul2i r p d1 d2 = fst $ mul2i_ r p d1 d2
div2w :: RoundMode -> Precision -> MPFR -> Word -> MPFR
div2w r p d1 d2 = fst $ div2w_ r p d1 d2
div2i :: RoundMode -> Precision -> MPFR -> Int -> MPFR
div2i r p d1 d2 = fst $ div2i_ r p d1 d2
add_ :: RoundMode -> Precision -> MPFR -> MPFR -> (MPFR,Int)
add_ r p d1 d2 = withMPFRsBA r p d1 d2 mpfr_add
addw_ :: RoundMode -> Precision -> MPFR -> Word -> (MPFR, Int)
addw_ r p d1 d = withMPFRBAui r p d1 (fromIntegral d) mpfr_add_ui
addi_ :: RoundMode -> Precision -> MPFR -> Int -> (MPFR, Int)
addi_ r p d1 d = withMPFRBAsi r p d1 (fromIntegral d) mpfr_add_si
sub_ :: RoundMode -> Precision -> MPFR -> MPFR -> (MPFR,Int)
sub_ r p d1 d2 = withMPFRsBA r p d1 d2 mpfr_sub
subw_ :: RoundMode -> Precision -> MPFR -> Word -> (MPFR, Int)
subw_ r p d1 d = withMPFRBAui r p d1 (fromIntegral d) mpfr_sub_ui
subi_ :: RoundMode -> Precision -> MPFR -> Int -> (MPFR, Int)
subi_ r p d1 d = withMPFRBAsi r p d1 (fromIntegral d) mpfr_sub_si
wsub_ :: RoundMode -> Precision -> Word -> MPFR -> (MPFR, Int)
wsub_ r p d d1 = withMPFRBAiu r p (fromIntegral d) d1 mpfr_ui_sub
isub_ :: RoundMode -> Precision -> Int -> MPFR -> (MPFR, Int)
isub_ r p d d1 = withMPFRBAis r p (fromIntegral d) d1 mpfr_si_sub
mul_ :: RoundMode -> Precision -> MPFR -> MPFR -> (MPFR,Int)
mul_ r p d1 d2 = withMPFRsBA r p d1 d2 mpfr_mul
mulw_ :: RoundMode -> Precision -> MPFR -> Word -> (MPFR, Int)
mulw_ r p d1 d = withMPFRBAui r p d1 (fromIntegral d) mpfr_mul_ui
muli_ :: RoundMode -> Precision -> MPFR -> Int -> (MPFR, Int)
muli_ r p d1 d = withMPFRBAsi r p d1 (fromIntegral d) mpfr_mul_si
sqr_ :: RoundMode -> Precision -> MPFR -> (MPFR, Int)
sqr_ r p d = withMPFR r p d mpfr_sqr
div_ :: RoundMode -> Precision -> MPFR -> MPFR -> (MPFR, Int)
div_ r p d1 d2 = withMPFRsBA r p d1 d2 mpfr_div
divw_ :: RoundMode -> Precision -> MPFR -> Word -> (MPFR, Int)
divw_ r p d1 d = withMPFRBAui r p d1 (fromIntegral d) mpfr_div_ui
divi_ :: RoundMode -> Precision -> MPFR -> Int -> (MPFR, Int)
divi_ r p d1 d = withMPFRBAsi r p d1 (fromIntegral d) mpfr_div_si
wdiv_ :: RoundMode -> Precision -> Word -> MPFR -> (MPFR, Int)
wdiv_ r p d d1 = withMPFRBAiu r p (fromIntegral d) d1 mpfr_ui_div
idiv_ :: RoundMode -> Precision -> Int -> MPFR -> (MPFR, Int)
idiv_ r p d d1 = withMPFRBAis r p (fromIntegral d) d1 mpfr_si_div
sqrt_ :: RoundMode -> Precision -> MPFR -> (MPFR, Int)
sqrt_ r p d = withMPFR r p d mpfr_sqrt
sqrtw_ :: RoundMode -> Precision -> Word -> (MPFR, Int)
sqrtw_ r p d = withMPFRUI r p d mpfr_sqrt_ui
cbrt_ :: RoundMode -> Precision -> MPFR -> (MPFR, Int)
cbrt_ r p d = withMPFR r p d mpfr_cbrt
root_ :: RoundMode -> Precision -> MPFR -> Word -> (MPFR, Int)
root_ r p d n = withMPFRBAui r p d (fromIntegral n) mpfr_root
pow_ :: RoundMode -> Precision -> MPFR -> MPFR -> (MPFR, Int)
pow_ r p d1 d2 = withMPFRsBA r p d1 d2 mpfr_pow
poww_ :: RoundMode -> Precision -> MPFR -> Word -> (MPFR , Int)
poww_ r p d1 d2 = withMPFRBAui r p d1 (fromIntegral d2) mpfr_pow_ui
powi_ :: RoundMode -> Precision -> MPFR -> Int -> (MPFR , Int)
powi_ r p d1 d2 = withMPFRBAsi r p d1 (fromIntegral d2) mpfr_pow_si
wpoww_ :: RoundMode -> Precision -> Word -> Word -> (MPFR , Int)
wpoww_ r p d1 d2 = unsafePerformIO go
where go = do withDummy p $ \p1 -> do
mpfr_ui_pow_ui p1 (fromIntegral d1) (fromIntegral d2) ((fromIntegral . fromEnum) r)
wpow_ :: RoundMode -> Precision -> Word -> MPFR -> (MPFR , Int)
wpow_ r p d1 d2 = withMPFRBAiu r p (fromIntegral d1) d2 mpfr_ui_pow
neg_ :: RoundMode -> Precision -> MPFR -> (MPFR, Int)
neg_ r p d = withMPFR r p d mpfr_neg
absD_ :: RoundMode -> Precision -> MPFR -> (MPFR , Int)
absD_ r p d = withMPFR r p d mpfr_abs
dim_ :: RoundMode -> Precision -> MPFR -> MPFR -> (MPFR, Int)
dim_ r p d1 d2 = withMPFRsBA r p d1 d2 mpfr_dim
mul2w_ :: RoundMode -> Precision -> MPFR -> Word -> (MPFR, Int)
mul2w_ r p d1 d2 = withMPFRBAui r p d1 (fromIntegral d2) mpfr_mul_2ui
mul2i_ :: RoundMode -> Precision -> MPFR -> Int -> (MPFR, Int)
mul2i_ r p d1 d2 = withMPFRBAsi r p d1 (fromIntegral d2) mpfr_mul_2si
div2w_ :: RoundMode -> Precision -> MPFR -> Word -> (MPFR, Int)
div2w_ r p d1 d2 = withMPFRBAui r p d1 (fromIntegral d2) mpfr_div_2ui
div2i_ :: RoundMode -> Precision -> MPFR -> Int -> (MPFR, Int)
div2i_ r p d1 d2 = withMPFRBAsi r p d1 (fromIntegral d2) mpfr_div_2si