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() { | ||||
| 		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 | ||||
| 			} | ||||
| 			if subIter.HasOperation(cleanName) { | ||||
|  | ||||
| @ -36,10 +36,6 @@ func evalContextValue(ctx ExprContext, self *term) (v any, err error) { | ||||
| 		for _, key := range keys { | ||||
| 			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 | ||||
| 	} else { | ||||
| 		err = self.errIncompatibleType(childValue) | ||||
|  | ||||
| @ -16,11 +16,10 @@ type fraction struct { | ||||
| } | ||||
| 
 | ||||
| func newFraction(num, den int64) *fraction { | ||||
| 	/*	if den < 0 { | ||||
| 	if den < 0 { | ||||
| 		den = -den | ||||
| 		num = -num | ||||
| 	}*/ | ||||
| 	num, den = simplifyIntegers(num, den) | ||||
| 	} | ||||
| 	return &fraction{num, den} | ||||
| } | ||||
| 
 | ||||
| @ -146,12 +145,12 @@ func lcm(a, b int64) (l int64) { | ||||
| 
 | ||||
| func sumFract(f1, f2 *fraction) (sum *fraction) { | ||||
| 	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 | ||||
| } | ||||
| 
 | ||||
| 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 | ||||
| } | ||||
| 
 | ||||
| @ -240,30 +239,23 @@ func divAnyFract(af1, af2 any) (quot any, err error) { | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func simplifyFraction(f *fraction) (v any) { | ||||
| 	f.num, f.den = simplifyIntegers(f.num, f.den) | ||||
| 	if f.den == 1 { | ||||
| 		v = f.num | ||||
| 	} else { | ||||
| 		v = &fraction{f.num, f.den} | ||||
| 	} | ||||
| 	return v | ||||
| func simplifyFraction(f *fraction) any { | ||||
| 	return simplifyIntegers(f.num, f.den) | ||||
| } | ||||
| 
 | ||||
| func simplifyIntegers(num, den int64) (a, b int64) { | ||||
| 	if num == 0 { | ||||
| 		return 0, 1 | ||||
| 	} | ||||
| 	if den == 0 { | ||||
| 		panic("fraction with denominator == 0") | ||||
| 	} | ||||
| func simplifyIntegers(num, den int64) (v any) { | ||||
| 	if den < 0 { | ||||
| 		den = -den | ||||
| 		num = -num | ||||
| 	} | ||||
| 	g := gcd(num, den) | ||||
| 	a = num / g | ||||
| 	b = den / g | ||||
| 	num = num / g | ||||
| 	den = den / g | ||||
| 	if den == 1 { | ||||
| 		v = num | ||||
| 	} else { | ||||
| 		v = &fraction{num, den} | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user