xref: /plan9/sys/src/libc/port/muldiv.c (revision 80ee5cbfe36716af62da8896207e9763b8e3d760)
1 #include <u.h>
2 #include <libc.h>
3 
4 ulong
umuldiv(ulong a,ulong b,ulong c)5 umuldiv(ulong a, ulong b, ulong c)
6 {
7 	double d;
8 
9 	d = ((double)a * (double)b) / (double)c;
10 	if(d >= 4294967296.)
11 		abort();
12 	return d;
13 }
14 
15 long
muldiv(long a,long b,long c)16 muldiv(long a, long b, long c)
17 {
18 	int s;
19 	long v;
20 
21 	s = 0;
22 	if(a < 0) {
23 		s = !s;
24 		a = -a;
25 	}
26 	if(b < 0) {
27 		s = !s;
28 		b = -b;
29 	}
30 	if(c < 0) {
31 		s = !s;
32 		c = -c;
33 	}
34 	v = umuldiv(a, b, c);
35 	if(s)
36 		v = -v;
37 	return v;
38 }
39