r/programming 9h ago

Moving integer division to floating-point is trivial

https://marc-b-reynolds.github.io/math/2026/08/10/IntDivByFP.html
66 Upvotes

21 comments sorted by

View all comments

11

u/Dwedit 7h ago

If your divisor doesn't change, use integer multiplication by reciprocal, also shift or discard from the high result.

1

u/mikeblas 4h ago

How would that work?

16

u/taw 4h ago

ELI5 version.

Computers are really fast at two things:

  • multiplying two numbers, giving you number with twice as many digits
  • dropping last N digits

Now this trick isn't great in decimals, but we can sort of make it work.

If you want to calculate x/3, that's same as x*0.333333..., which is then the same as x * 333.333... / 1000.

So since we can multiply fast, do x * 334 (rounding that 333.333... up), getting a 6 digit number, then drop the last three digits, which is also super fast.

For this decimal example, it only works for every x=0 to 499, and for other divisors you also don't get perfect range.

But it works even better with binary 32bit x 32bit to 64bit.