/gomath

Essential Maths go library

Primary LanguageGoMIT LicenseMIT

gomath

Essential Maths go library

Floats to rationals relies on Continued Fraction.

It's sometimes more appropriate than default big.Rat SetString, because you can get 2/3 from 0.6666 by specifiing required precision. In big.Rat SetString you can only get 3333/50000, and have no way to manipulate than (as of go 1.11).

Example

func ExampleNewRatP() {
	fmt.Println(NewRatP(0.6666, 0.01).String())
	fmt.Println(NewRatP(0.981, 0.001).String())
	fmt.Println(NewRatP(0.75, 0.01).String())
	// Output:
	// 2/3
	// 981/1000
	// 3/4
}
func ExampleNewRatI() {
	fmt.Println(NewRatI(0.6667, 3).String())
	fmt.Println(NewRatI(0.6667, 4).String())
	// Output:
	// 2/3
	// 6667/10000
}

Docs

import dectofrac "github.com/av-elier/go-decimal-to-rational"

func NewRatI

func NewRatI(val float64, iterations int64) *big.Rat

NewRatI returns rational from decimal using iterations number of iterations in Continued Fraction algorythm

func NewRatP

func NewRatP(val float64, stepPrecision float64) *big.Rat

NewRatP returns rational from decimal by going as mush iterations, until next fraction is less than stepPrecision