muldiv.c 403 B

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