mirror of
https://github.com/Open-Argon/argon-v3.git
synced 2025-12-06 08:56:07 +00:00
create logarithm functions
This commit is contained in:
86
src/logarithms.go
Normal file
86
src/logarithms.go
Normal file
@@ -0,0 +1,86 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
)
|
||||
|
||||
var N = newNumber().SetInt64(1e10)
|
||||
|
||||
func Ln(x number) number {
|
||||
output := newNumber()
|
||||
output.SetInt64(1)
|
||||
output.Quo(output, N)
|
||||
|
||||
n1, _ := x.Float64()
|
||||
n2, _ := output.Float64()
|
||||
output = newNumber().SetFloat64(math.Pow(n1, n2))
|
||||
if output == nil {
|
||||
output = infinity
|
||||
}
|
||||
output.Sub(output, newNumber().SetInt64(1))
|
||||
output.Mul(output, N)
|
||||
return output
|
||||
}
|
||||
|
||||
func ArgonLn(a ...any) (any, ArErr) {
|
||||
if len(a) != 0 {
|
||||
return nil, ArErr{TYPE: "Runtime Error", message: "ln takes 1 argument, got " + fmt.Sprint(len(a)),
|
||||
EXISTS: true}
|
||||
}
|
||||
if typeof(a[0]) != "number" {
|
||||
return nil, ArErr{TYPE: "Runtime Error", message: "ln takes a number not a '" + typeof(a[0]) + "'",
|
||||
EXISTS: true}
|
||||
}
|
||||
x := a[0].(number)
|
||||
if x.Sign() <= 0 {
|
||||
return nil, ArErr{TYPE: "Runtime Error", message: "ln takes a positive number",
|
||||
EXISTS: true}
|
||||
}
|
||||
return Ln(x), ArErr{}
|
||||
}
|
||||
|
||||
var __ln10 = Ln(newNumber().SetInt64(10))
|
||||
|
||||
func ArgonLog(a ...any) (any, ArErr) {
|
||||
if len(a) != 1 {
|
||||
return nil, ArErr{TYPE: "Runtime Error", message: "log takes 1 argument, got " + fmt.Sprint(len(a)),
|
||||
EXISTS: true}
|
||||
}
|
||||
if typeof(a[0]) != "number" {
|
||||
return nil, ArErr{TYPE: "Runtime Error", message: "log takes a number not a '" + typeof(a[0]) + "'",
|
||||
EXISTS: true}
|
||||
}
|
||||
x := a[0].(number)
|
||||
if x.Sign() <= 0 {
|
||||
return nil, ArErr{TYPE: "Runtime Error", message: "log takes a positive number",
|
||||
EXISTS: true}
|
||||
}
|
||||
return Ln(x).Quo(Ln(x), __ln10), ArErr{}
|
||||
}
|
||||
|
||||
func ArgonLogN(a ...any) (any, ArErr) {
|
||||
if len(a) != 2 {
|
||||
return nil, ArErr{TYPE: "Runtime Error", message: "logN takes 2 argument, got " + fmt.Sprint(len(a)),
|
||||
EXISTS: true}
|
||||
}
|
||||
if typeof(a[0]) != "number" {
|
||||
return nil, ArErr{TYPE: "Runtime Error", message: "logN takes a number not a '" + typeof(a[0]) + "'",
|
||||
EXISTS: true}
|
||||
}
|
||||
if typeof(a[1]) != "number" {
|
||||
return nil, ArErr{TYPE: "Runtime Error", message: "logN takes a number not a '" + typeof(a[0]) + "'",
|
||||
EXISTS: true}
|
||||
}
|
||||
N := a[0].(number)
|
||||
if N.Sign() <= 0 {
|
||||
return nil, ArErr{TYPE: "Runtime Error", message: "logN takes a positive number",
|
||||
EXISTS: true}
|
||||
}
|
||||
x := a[1].(number)
|
||||
if x.Sign() <= 0 {
|
||||
return nil, ArErr{TYPE: "Runtime Error", message: "logN takes a positive number",
|
||||
EXISTS: true}
|
||||
}
|
||||
return Ln(x).Quo(Ln(x), Ln(N)), ArErr{}
|
||||
}
|
||||
Reference in New Issue
Block a user