159cc4ca5SDavid du Colombier #include <u.h>
259cc4ca5SDavid du Colombier #include <libc.h>
359cc4ca5SDavid du Colombier
459cc4ca5SDavid du Colombier ulong
umuldiv(ulong a,ulong b,ulong c)559cc4ca5SDavid du Colombier umuldiv(ulong a, ulong b, ulong c)
659cc4ca5SDavid du Colombier {
7*80ee5cbfSDavid du Colombier double d;
8*80ee5cbfSDavid du Colombier
9*80ee5cbfSDavid du Colombier d = ((double)a * (double)b) / (double)c;
10*80ee5cbfSDavid du Colombier if(d >= 4294967296.)
11*80ee5cbfSDavid du Colombier abort();
12*80ee5cbfSDavid du Colombier return d;
1359cc4ca5SDavid du Colombier }
1459cc4ca5SDavid du Colombier
1559cc4ca5SDavid du Colombier long
muldiv(long a,long b,long c)1659cc4ca5SDavid du Colombier muldiv(long a, long b, long c)
1759cc4ca5SDavid du Colombier {
1859cc4ca5SDavid du Colombier int s;
1959cc4ca5SDavid du Colombier long v;
2059cc4ca5SDavid du Colombier
2159cc4ca5SDavid du Colombier s = 0;
2259cc4ca5SDavid du Colombier if(a < 0) {
2359cc4ca5SDavid du Colombier s = !s;
2459cc4ca5SDavid du Colombier a = -a;
2559cc4ca5SDavid du Colombier }
2659cc4ca5SDavid du Colombier if(b < 0) {
2759cc4ca5SDavid du Colombier s = !s;
2859cc4ca5SDavid du Colombier b = -b;
2959cc4ca5SDavid du Colombier }
3059cc4ca5SDavid du Colombier if(c < 0) {
3159cc4ca5SDavid du Colombier s = !s;
3259cc4ca5SDavid du Colombier c = -c;
3359cc4ca5SDavid du Colombier }
3459cc4ca5SDavid du Colombier v = umuldiv(a, b, c);
3559cc4ca5SDavid du Colombier if(s)
3659cc4ca5SDavid du Colombier v = -v;
3759cc4ca5SDavid du Colombier return v;
3859cc4ca5SDavid du Colombier }
39