Skip to content

Commit

Permalink
Merge pull request #191 from pratikmota/mathfunc-part-3
Browse files Browse the repository at this point in the history
[Adding math function] Support for Atan2, Atanh
  • Loading branch information
refaktor committed Apr 15, 2024
2 parents 33a22a5 + 6a094a7 commit 5236b5f
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 1 deletion.
42 changes: 42 additions & 0 deletions evaldo/builtins_math.go
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,48 @@ var Builtins_math = map[string]*env.Builtin{
}
},
},
"atan2": {
Argsn: 2,
Doc: "Returns the arc tangent of y/x, using the signs of the two to determine the quadrant of the return value.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch val := arg0.(type) {
case env.Integer:
switch val2 := arg1.(type) {
case env.Integer:
return *env.NewDecimal(math.Atan2(float64(val.Value), float64(val2.Value)))
case env.Decimal:
return *env.NewDecimal(math.Atan2(float64(val.Value), val2.Value))
default:
return MakeArgError(ps, 2, []env.Type{env.IntegerType, env.DecimalType}, "atan2")
}
case env.Decimal:
switch val2 := arg1.(type) {
case env.Integer:
return *env.NewDecimal(math.Atan2(val.Value, float64(val2.Value)))
case env.Decimal:
return *env.NewDecimal(math.Atan2(val.Value, val2.Value))
default:
return MakeArgError(ps, 2, []env.Type{env.IntegerType, env.DecimalType}, "atan2")
}
default:
return MakeArgError(ps, 1, []env.Type{env.IntegerType, env.DecimalType}, "atan2")
}
},
},
"atanh": {
Argsn: 1,
Doc: "Returns the inverse hyperbolic tangent.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch val := arg0.(type) {
case env.Integer:
return *env.NewDecimal(math.Atanh(float64(val.Value)))
case env.Decimal:
return *env.NewDecimal(math.Atanh(val.Value))
default:
return MakeArgError(ps, 1, []env.Type{env.IntegerType, env.DecimalType}, "atanh")
}
},
},
"pi": {
Argsn: 0,
Doc: "Return Pi constant.",
Expand Down
15 changes: 14 additions & 1 deletion tests/misc.rye
Original file line number Diff line number Diff line change
Expand Up @@ -383,10 +383,23 @@ group "atan"
equal { do\in math { atan 1 } } 0.7853981633974483
}

group "atan2"
mold\nowrap ""
{ { string } }
{
equal { do\in math { atan2 3 4 } } 0.6435011087932844
}

group "atanh"
mold\nowrap ""
{ { string } }
{
equal { do\in math { atanh 0.5 } } 0.5493061443340548
}


; TODO add sin and cos ... need PI constant

}


end

0 comments on commit 5236b5f

Please sign in to comment.