Skip to content

Commit 618856b

Browse files
authored
Merge pull request enso-org#61 from luna/real_functions
Add missing real number functions
2 parents 757bbaa + 835c04a commit 618856b

File tree

2 files changed

+94
-21
lines changed

2 files changed

+94
-21
lines changed

stdlib/Std/src/Base.luna

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ native class Real:
6060
def - that: primRealSubtract self that
6161
## Floating point division.
6262
def / that: primRealDivide self that
63+
## Flotaing point exponentiation.
64+
def ^ that: primRealPow self that
65+
## Floating point logarithm with given basis.
66+
def log base: primRealLog self base
6367
## Tests whether `self` is greater than the argument.
6468
def > that: primRealGt self that
6569
## Tests whether `self` is lesser than the argument.
@@ -85,6 +89,34 @@ native class Real:
8589
## Tangent function.
8690
def tan: primRealTan self
8791

92+
## Hyperbolic sine function.
93+
def sinh: primRealSinh self
94+
## Hyperbolic cosine function.
95+
def cosh: primRealCosh self
96+
## Hyperbolic tangent function.
97+
def tanh: primRealTanh self
98+
99+
## Inverse sine function.
100+
def asin: primRealAsin self
101+
## Inverse cosine function.
102+
def acos: primRealAcos self
103+
## Inverse tangent function.
104+
def atan: primRealAtan self
105+
106+
## Inverse hyperbolic sine function.
107+
def asinh: primRealAsinh self
108+
## Inverse hyperbolic cosine function.
109+
def acosh: primRealAcosh self
110+
## Inverse hyperbolic tangent function.
111+
def atanh: primRealAtanh self
112+
113+
## Natural exponential function.
114+
def exp: primRealExp self
115+
## Natural logarithm function.
116+
def ln: primRealLn self
117+
## Square root.
118+
def sqrt: primRealSqrt self
119+
88120
## Displays a number as text.
89121
def shortRep: self.toText
90122
## Converts a number to `JSON`.

stdlib/src/Luna/Builtin/Std.hs

Lines changed: 62 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -256,32 +256,72 @@ primReal imps = do
256256
Right (double2DoubleAssumptions, double2Double) <- oneArgFun "Real" "Real"
257257
Right (doubleIntDoubleAssumptions, doubleIntDouble) <- twoArgFun "Real" "Int" "Real"
258258

259-
let plusVal = toLunaValue imps ((+) :: Double -> Double -> Double)
260-
timeVal = toLunaValue imps ((*) :: Double -> Double -> Double)
261-
minusVal = toLunaValue imps ((-) :: Double -> Double -> Double)
262-
divVal = toLunaValue imps ((/) :: Double -> Double -> Double)
263-
eqVal = toLunaValue imps ((==) :: Double -> Double -> Bool)
264-
ltVal = toLunaValue imps ((<) :: Double -> Double -> Bool)
265-
gtVal = toLunaValue imps ((>) :: Double -> Double -> Bool)
259+
let plusVal = toLunaValue imps ((+) :: Double -> Double -> Double)
260+
timeVal = toLunaValue imps ((*) :: Double -> Double -> Double)
261+
minusVal = toLunaValue imps ((-) :: Double -> Double -> Double)
262+
divVal = toLunaValue imps ((/) :: Double -> Double -> Double)
263+
logBaseVal = toLunaValue imps (flip logBase :: Double -> Double -> Double)
264+
powVal = toLunaValue imps ((**) :: Double -> Double -> Double)
265+
eqVal = toLunaValue imps ((==) :: Double -> Double -> Bool)
266+
ltVal = toLunaValue imps ((<) :: Double -> Double -> Bool)
267+
gtVal = toLunaValue imps ((>) :: Double -> Double -> Bool)
266268
roundVal = toLunaValue imps ((\r prec -> (fromIntegral $ round (r * (10 ^ prec))) / (10 ^ prec :: Double)) :: Double -> Integer -> Double)
267269
showVal = toLunaValue imps (convert . show :: Double -> Text)
270+
268271
sinVal = toLunaValue imps (sin :: Double -> Double)
269272
cosVal = toLunaValue imps (cos :: Double -> Double)
270273
tanVal = toLunaValue imps (tan :: Double -> Double)
274+
275+
asinVal = toLunaValue imps (asin :: Double -> Double)
276+
acosVal = toLunaValue imps (acos :: Double -> Double)
277+
atanVal = toLunaValue imps (atan :: Double -> Double)
278+
279+
sinhVal = toLunaValue imps (sinh :: Double -> Double)
280+
coshVal = toLunaValue imps (cosh :: Double -> Double)
281+
tanhVal = toLunaValue imps (tanh :: Double -> Double)
282+
283+
asinhVal = toLunaValue imps (asinh :: Double -> Double)
284+
acoshVal = toLunaValue imps (acosh :: Double -> Double)
285+
atanhVal = toLunaValue imps (atanh :: Double -> Double)
286+
287+
expVal = toLunaValue imps (exp :: Double -> Double)
288+
sqrtVal = toLunaValue imps (sqrt :: Double -> Double)
289+
logVal = toLunaValue imps (log :: Double -> Double)
271290
uminusVal = toLunaValue imps ((* (-1)) :: Double -> Double)
272-
return $ Map.fromList [ ("primRealAdd", Function boxed3Doubles plusVal boxed3DoublesAssumptions )
273-
, ("primRealMultiply", Function boxed3Doubles timeVal boxed3DoublesAssumptions )
274-
, ("primRealSubtract", Function boxed3Doubles minusVal boxed3DoublesAssumptions )
275-
, ("primRealDivide", Function boxed3Doubles divVal boxed3DoublesAssumptions )
276-
, ("primRealEquals", Function double2Bool eqVal double2BoolAssumptions )
277-
, ("primRealLt", Function double2Bool ltVal double2BoolAssumptions )
278-
, ("primRealGt", Function double2Bool gtVal double2BoolAssumptions )
279-
, ("primRealRound", Function doubleIntDouble roundVal doubleIntDoubleAssumptions)
280-
, ("primRealToText", Function double2text showVal double2TextAssumptions )
281-
, ("primRealSin", Function double2Double sinVal double2DoubleAssumptions )
282-
, ("primRealCos", Function double2Double cosVal double2DoubleAssumptions )
283-
, ("primRealTan", Function double2Double tanVal double2DoubleAssumptions )
284-
, ("primRealNegate", Function double2Double uminusVal double2DoubleAssumptions )
291+
return $ Map.fromList [ ("primRealAdd", Function boxed3Doubles plusVal boxed3DoublesAssumptions )
292+
, ("primRealMultiply", Function boxed3Doubles timeVal boxed3DoublesAssumptions )
293+
, ("primRealSubtract", Function boxed3Doubles minusVal boxed3DoublesAssumptions )
294+
, ("primRealDivide", Function boxed3Doubles divVal boxed3DoublesAssumptions )
295+
, ("primRealPow", Function boxed3Doubles powVal boxed3DoublesAssumptions )
296+
, ("primRealLog", Function boxed3Doubles logBaseVal boxed3DoublesAssumptions )
297+
298+
, ("primRealEquals", Function double2Bool eqVal double2BoolAssumptions )
299+
, ("primRealLt", Function double2Bool ltVal double2BoolAssumptions )
300+
, ("primRealGt", Function double2Bool gtVal double2BoolAssumptions )
301+
302+
, ("primRealRound", Function doubleIntDouble roundVal doubleIntDoubleAssumptions)
303+
, ("primRealToText", Function double2text showVal double2TextAssumptions )
304+
305+
, ("primRealSin", Function double2Double sinVal double2DoubleAssumptions )
306+
, ("primRealCos", Function double2Double cosVal double2DoubleAssumptions )
307+
, ("primRealTan", Function double2Double tanVal double2DoubleAssumptions )
308+
309+
, ("primRealAsin", Function double2Double asinVal double2DoubleAssumptions )
310+
, ("primRealAcos", Function double2Double acosVal double2DoubleAssumptions )
311+
, ("primRealAtan", Function double2Double atanVal double2DoubleAssumptions )
312+
313+
, ("primRealSinh", Function double2Double sinhVal double2DoubleAssumptions )
314+
, ("primRealCosh", Function double2Double coshVal double2DoubleAssumptions )
315+
, ("primRealTanh", Function double2Double tanhVal double2DoubleAssumptions )
316+
317+
, ("primRealAsinh", Function double2Double asinhVal double2DoubleAssumptions )
318+
, ("primRealAcosh", Function double2Double acoshVal double2DoubleAssumptions )
319+
, ("primRealAtanh", Function double2Double atanhVal double2DoubleAssumptions )
320+
321+
, ("primRealExp", Function double2Double expVal double2DoubleAssumptions )
322+
, ("primRealLn", Function double2Double logVal double2DoubleAssumptions )
323+
, ("primRealSqrt", Function double2Double sqrtVal double2DoubleAssumptions )
324+
, ("primRealNegate", Function double2Double uminusVal double2DoubleAssumptions )
285325
]
286326

287327
primInt :: Imports -> IO (Map Name Function)
@@ -479,6 +519,7 @@ prelude imps = mdo
479519
mod <- preludeArithOp "%"
480520
plus <- preludeArithOp "+"
481521
div <- preludeArithOp "/"
522+
pow <- preludeArithOp "^"
482523
uminus <- preludeUnaryOp "negate"
483524
gt <- preludeCmpOp importBoxes ">"
484525
lt <- preludeCmpOp importBoxes "<"
@@ -489,7 +530,7 @@ prelude imps = mdo
489530
intFuns <- primInt importBoxes
490531
textFuns <- primText importBoxes
491532
binFuns <- primBinary importBoxes
492-
let opMap = Map.fromList [("+", plus), ("-", minus), ("*", times), (">", gt), ("<", lt), (">=", gte), ("<=", lte), ("==", eq), ("%", mod), ("/", div), ("#uminus#", uminus)]
533+
let opMap = Map.fromList [("+", plus), ("-", minus), ("*", times), ("^", pow), (">", gt), ("<", lt), (">=", gte), ("<=", lte), ("==", eq), ("%", mod), ("/", div), ("#uminus#", uminus)]
493534
funMap = Map.unions [realFuns, intFuns, textFuns, binFuns, opMap]
494535
let importBoxes = unionImports imps $ Imports def (WithDocumentation def . Right <$> funMap)
495536
return funMap

0 commit comments

Comments
 (0)