41 lines
672 B
Go
41 lines
672 B
Go
|
package zxcvbn_math
|
||
|
|
||
|
import "math"
|
||
|
|
||
|
/**
|
||
|
I am surprised that I have to define these. . . Maybe i just didn't look hard enough for a lib.
|
||
|
*/
|
||
|
|
||
|
//http://blog.plover.com/math/choose.html
|
||
|
func NChoseK(n, k float64) float64 {
|
||
|
if k > n {
|
||
|
return 0
|
||
|
} else if k == 0 {
|
||
|
return 1
|
||
|
}
|
||
|
|
||
|
var r float64 = 1
|
||
|
|
||
|
for d := float64(1); d <= k; d++ {
|
||
|
r *= n
|
||
|
r /= d
|
||
|
n--
|
||
|
}
|
||
|
|
||
|
return r
|
||
|
}
|
||
|
|
||
|
func Round(val float64, roundOn float64, places int) (newVal float64) {
|
||
|
var round float64
|
||
|
pow := math.Pow(10, float64(places))
|
||
|
digit := pow * val
|
||
|
_, div := math.Modf(digit)
|
||
|
if div >= roundOn {
|
||
|
round = math.Ceil(digit)
|
||
|
} else {
|
||
|
round = math.Floor(digit)
|
||
|
}
|
||
|
newVal = round / pow
|
||
|
return
|
||
|
}
|