Fast method to multiply integer by proper fraction without floats or overflow
问题 My program frequently requires the following calculation to be performed: Given: N is a 32-bit integer D is a 32-bit integer abs(N) <= abs(D) D != 0 X is a 32-bit integer of any value Find: X * N / D as a rounded integer that is X scaled to N/D (i.e. 10 * 2 / 3 = 7) Obviously I could just use r=x*n/d directly but I will often get overflow from the x*n . If I instead do r=x*(n/d) then I only get 0 or x due to integer division dropping the fractional component. And then there's r=x*(float(n)/d)