fix for arithmetic routines
This commit is contained in:
parent
e916c82fa6
commit
b5c7162555
1 changed files with 22 additions and 6 deletions
|
|
@ -69,6 +69,7 @@ func add(in *ast.Token, a ast.VarTable, f ast.FuncTable) *ast.Token {
|
||||||
|
|
||||||
func sub(in *ast.Token, a ast.VarTable, f ast.FuncTable) *ast.Token {
|
func sub(in *ast.Token, a ast.VarTable, f ast.FuncTable) *ast.Token {
|
||||||
var res float64
|
var res float64
|
||||||
|
var sub float64
|
||||||
|
|
||||||
for i := in; i != nil; i = i.Next {
|
for i := in; i != nil; i = i.Next {
|
||||||
if i.Tag != ast.NUMBER {
|
if i.Tag != ast.NUMBER {
|
||||||
|
|
@ -78,6 +79,7 @@ func sub(in *ast.Token, a ast.VarTable, f ast.FuncTable) *ast.Token {
|
||||||
|
|
||||||
token := i.Inner.(string)
|
token := i.Inner.(string)
|
||||||
isFloat := false
|
isFloat := false
|
||||||
|
var inner float64
|
||||||
for _, char := range token {
|
for _, char := range token {
|
||||||
if char == '.' {
|
if char == '.' {
|
||||||
isFloat = true
|
isFloat = true
|
||||||
|
|
@ -87,7 +89,7 @@ func sub(in *ast.Token, a ast.VarTable, f ast.FuncTable) *ast.Token {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
res -= n
|
inner = n
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -98,15 +100,21 @@ func sub(in *ast.Token, a ast.VarTable, f ast.FuncTable) *ast.Token {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
res -= float64(n)
|
inner = float64(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
if i.Next != nil {
|
||||||
|
sub += inner
|
||||||
|
} else {
|
||||||
|
res = inner
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &ast.Token{Tag: ast.NUMBER, Inner: fmt.Sprintf("%f", res)}
|
return &ast.Token{Tag: ast.NUMBER, Inner: fmt.Sprintf("%f", res - sub)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func mult(in *ast.Token, a ast.VarTable, f ast.FuncTable) *ast.Token {
|
func mult(in *ast.Token, a ast.VarTable, f ast.FuncTable) *ast.Token {
|
||||||
var res float64
|
res := 1.0
|
||||||
|
|
||||||
for i := in; i != nil; i = i.Next {
|
for i := in; i != nil; i = i.Next {
|
||||||
if i.Tag != ast.NUMBER {
|
if i.Tag != ast.NUMBER {
|
||||||
|
|
@ -147,6 +155,8 @@ func div(in *ast.Token, a ast.VarTable, f ast.FuncTable) *ast.Token {
|
||||||
var res float64
|
var res float64
|
||||||
|
|
||||||
for i := in; i != nil; i = i.Next {
|
for i := in; i != nil; i = i.Next {
|
||||||
|
inner := 0.0
|
||||||
|
|
||||||
if i.Tag != ast.NUMBER {
|
if i.Tag != ast.NUMBER {
|
||||||
log.Log(log.ERR, "Non-number given to DIV", "div")
|
log.Log(log.ERR, "Non-number given to DIV", "div")
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -163,7 +173,7 @@ func div(in *ast.Token, a ast.VarTable, f ast.FuncTable) *ast.Token {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
res /= n
|
inner = n
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -174,7 +184,13 @@ func div(in *ast.Token, a ast.VarTable, f ast.FuncTable) *ast.Token {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
res /= float64(n)
|
inner = float64(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
if i == in {
|
||||||
|
res = inner
|
||||||
|
} else {
|
||||||
|
res = res / inner
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue