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