3 Star 1 Fork 0

Gitee 极速下载/otto

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/robertkrimen/otto
克隆/下载
builtin_math.go 4.93 KB
一键复制 编辑 原始数据 按行查看 历史
Steven Hartland 提交于 2024-04-13 17:05 . chore: update ci versions (#519)
package otto
import (
"math"
"math/rand"
)
// Math
func builtinMathAbs(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Abs(number))
}
func builtinMathAcos(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Acos(number))
}
func builtinMathAcosh(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Acosh(number))
}
func builtinMathAsin(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Asin(number))
}
func builtinMathAsinh(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Asinh(number))
}
func builtinMathAtan(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Atan(number))
}
func builtinMathAtan2(call FunctionCall) Value {
y := call.Argument(0).float64()
if math.IsNaN(y) {
return NaNValue()
}
x := call.Argument(1).float64()
if math.IsNaN(x) {
return NaNValue()
}
return float64Value(math.Atan2(y, x))
}
func builtinMathAtanh(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Atanh(number))
}
func builtinMathCbrt(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Cbrt(number))
}
func builtinMathCos(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Cos(number))
}
func builtinMathCeil(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Ceil(number))
}
func builtinMathCosh(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Cosh(number))
}
func builtinMathExp(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Exp(number))
}
func builtinMathExpm1(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Expm1(number))
}
func builtinMathFloor(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Floor(number))
}
func builtinMathLog(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Log(number))
}
func builtinMathLog10(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Log10(number))
}
func builtinMathLog1p(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Log1p(number))
}
func builtinMathLog2(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Log2(number))
}
func builtinMathMax(call FunctionCall) Value {
switch len(call.ArgumentList) {
case 0:
return negativeInfinityValue()
case 1:
return float64Value(call.ArgumentList[0].float64())
}
result := call.ArgumentList[0].float64()
if math.IsNaN(result) {
return NaNValue()
}
for _, value := range call.ArgumentList[1:] {
value := value.float64()
if math.IsNaN(value) {
return NaNValue()
}
result = math.Max(result, value)
}
return float64Value(result)
}
func builtinMathMin(call FunctionCall) Value {
switch len(call.ArgumentList) {
case 0:
return positiveInfinityValue()
case 1:
return float64Value(call.ArgumentList[0].float64())
}
result := call.ArgumentList[0].float64()
if math.IsNaN(result) {
return NaNValue()
}
for _, value := range call.ArgumentList[1:] {
value := value.float64()
if math.IsNaN(value) {
return NaNValue()
}
result = math.Min(result, value)
}
return float64Value(result)
}
func builtinMathPow(call FunctionCall) Value {
// TODO Make sure this works according to the specification (15.8.2.13)
x := call.Argument(0).float64()
y := call.Argument(1).float64()
if math.Abs(x) == 1 && math.IsInf(y, 0) {
return NaNValue()
}
return float64Value(math.Pow(x, y))
}
func builtinMathRandom(call FunctionCall) Value {
var v float64
if call.runtime.random != nil {
v = call.runtime.random()
} else {
v = rand.Float64() //nolint:gosec
}
return float64Value(v)
}
func builtinMathRound(call FunctionCall) Value {
number := call.Argument(0).float64()
value := math.Floor(number + 0.5)
if value == 0 {
value = math.Copysign(0, number)
}
return float64Value(value)
}
func builtinMathSin(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Sin(number))
}
func builtinMathSinh(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Sinh(number))
}
func builtinMathSqrt(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Sqrt(number))
}
func builtinMathTan(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Tan(number))
}
func builtinMathTanh(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Tanh(number))
}
func builtinMathTrunc(call FunctionCall) Value {
number := call.Argument(0).float64()
return float64Value(math.Trunc(number))
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mirrors/otto.git
git@gitee.com:mirrors/otto.git
mirrors
otto
otto
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385