Compare commits
No commits in common. "2c55167dd026da4fbeb5f3216ee5eecb232b6280" and "5809de419f19cc98824f480e0b43f21be63739e8" have entirely different histories.
2c55167dd0
...
5809de419f
@ -100,7 +100,7 @@ func doMul(ctx ExprContext, name string, it Iterator) (result any, err error) {
|
|||||||
|
|
||||||
for v, err = it.Next(); err == nil; v, err = it.Next() {
|
for v, err = it.Next(); err == nil; v, err = it.Next() {
|
||||||
if subIter, ok := v.(Iterator); ok {
|
if subIter, ok := v.(Iterator); ok {
|
||||||
if v, err = doMul(ctx, name, subIter); err != nil {
|
if v, err = doAdd(ctx, name, subIter); err != nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if subIter.HasOperation(cleanName) {
|
if subIter.HasOperation(cleanName) {
|
||||||
|
@ -36,10 +36,6 @@ func evalContextValue(ctx ExprContext, self *term) (v any, err error) {
|
|||||||
for _, key := range keys {
|
for _, key := range keys {
|
||||||
d[key], _ = sourceCtx.GetVar(key)
|
d[key], _ = sourceCtx.GetVar(key)
|
||||||
}
|
}
|
||||||
keys = sourceCtx.EnumFuncs(func(name string) bool { return true })
|
|
||||||
for _, key := range keys {
|
|
||||||
d[key], _ =sourceCtx.GetFuncInfo(key)
|
|
||||||
}
|
|
||||||
v = d
|
v = d
|
||||||
} else {
|
} else {
|
||||||
err = self.errIncompatibleType(childValue)
|
err = self.errIncompatibleType(childValue)
|
||||||
|
@ -16,11 +16,10 @@ type fraction struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newFraction(num, den int64) *fraction {
|
func newFraction(num, den int64) *fraction {
|
||||||
/* if den < 0 {
|
if den < 0 {
|
||||||
den = -den
|
den = -den
|
||||||
num = -num
|
num = -num
|
||||||
}*/
|
}
|
||||||
num, den = simplifyIntegers(num, den)
|
|
||||||
return &fraction{num, den}
|
return &fraction{num, den}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,12 +145,12 @@ func lcm(a, b int64) (l int64) {
|
|||||||
|
|
||||||
func sumFract(f1, f2 *fraction) (sum *fraction) {
|
func sumFract(f1, f2 *fraction) (sum *fraction) {
|
||||||
m := lcm(f1.den, f2.den)
|
m := lcm(f1.den, f2.den)
|
||||||
sum = newFraction(f1.num*(m/f1.den) + f2.num*(m/f2.den), m)
|
sum = &fraction{f1.num*(m/f1.den) + f2.num*(m/f2.den), m}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func mulFract(f1, f2 *fraction) (prod *fraction) {
|
func mulFract(f1, f2 *fraction) (prod *fraction) {
|
||||||
prod = newFraction(f1.num * f2.num, f1.den * f2.den)
|
prod = &fraction{f1.num * f2.num, f1.den * f2.den}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,30 +239,23 @@ func divAnyFract(af1, af2 any) (quot any, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func simplifyFraction(f *fraction) (v any) {
|
func simplifyFraction(f *fraction) any {
|
||||||
f.num, f.den = simplifyIntegers(f.num, f.den)
|
return simplifyIntegers(f.num, f.den)
|
||||||
if f.den == 1 {
|
|
||||||
v = f.num
|
|
||||||
} else {
|
|
||||||
v = &fraction{f.num, f.den}
|
|
||||||
}
|
|
||||||
return v
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func simplifyIntegers(num, den int64) (a, b int64) {
|
func simplifyIntegers(num, den int64) (v any) {
|
||||||
if num == 0 {
|
|
||||||
return 0, 1
|
|
||||||
}
|
|
||||||
if den == 0 {
|
|
||||||
panic("fraction with denominator == 0")
|
|
||||||
}
|
|
||||||
if den < 0 {
|
if den < 0 {
|
||||||
den = -den
|
den = -den
|
||||||
num = -num
|
num = -num
|
||||||
}
|
}
|
||||||
g := gcd(num, den)
|
g := gcd(num, den)
|
||||||
a = num / g
|
num = num / g
|
||||||
b = den / g
|
den = den / g
|
||||||
|
if den == 1 {
|
||||||
|
v = num
|
||||||
|
} else {
|
||||||
|
v = &fraction{num, den}
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user