1
0
Fork 0

work on fixed

This commit is contained in:
coaljoe 2020-10-27 17:36:43 +03:00
parent 481e204323
commit 4dbf333ab9
2 changed files with 48 additions and 0 deletions

View File

@ -59,6 +59,32 @@ pub fn (f Fixed) sub(b Fixed) Fixed {
return Fixed{fp: f.fp - b.fp}
}
pub fn (f Fixed) mul(b Fixed) Fixed {
// XXX
f0 := b
fp_a := f.fp / c_scale
fp_b := f.fp % c_scale
fp0_a := f0.fp / c_scale
fp0_b := f0.fp % c_scale
mut result := i64(0)
if fp0_a != 0 {
result = fp_a*fp0_a*c_scale + fp_b*fp0_a
}
if fp0_b != 0 {
result = result + (fp_a * fp0_b) + ((fp_b)*fp0_b)/c_scale
}
return Fixed{fp: result}
}
pub fn (f Fixed) div(b Fixed) Fixed {
return new_f(f.float() / b.float())
}
pub fn (f Fixed) float() f64 {
return f64(f.fp) / f64(c_scale)
}

View File

@ -37,6 +37,28 @@ fn test_fixed() {
println("f4.float: ${f4.float()}")
println("f5.float: ${f5.float()}")
}
{
println("mul:")
f1 := new_f(1.1)
f2 := new_f(10)
r := f1.mul(f2)
println("r.float: ${r.float()}")
}
{
println("dev:")
f1 := new_f(1.1)
f2 := new_f(2.0)
r := f1.div(f2)
println("r.float: ${r.float()}")
}
println("done")
}