Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#include <u.h>
#include <libc.h>

ulong
umuldiv(ulong a, ulong b, ulong c)
{
        double d;

        d = ((double)a * (double)b) / (double)c;
        if(d >= 4294967296.)
                abort();
        return d;
}

long
muldiv(long a, long b, long c)
{
        int s;
        long v;

        s = 0;
        if(a < 0) {
                s = !s;
                a = -a;
        }
        if(b < 0) {
                s = !s;
                b = -b;
        }
        if(c < 0) {
                s = !s;
                c = -c;
        }
        v = umuldiv(a, b, c);
        if(s)
                v = -v;
        return v;
}