Dividing large numbers in Python
python
Solution
Expanding on my comment, if `N` and `f2` are `long`s strictly greater than 0, then
fmin = (N - 1) // f2 + 1
is exactly `ceil(N / float(f2))` (but even more accurately than using floats).
(The use of `//` rather than `/` for integer division is for compatibility with Python 3.x for no extra effort.)
It is because `N // f2` gives you (basically) `floor(N / float(f2))` and so `N // f2 + 1` is almost always the same as `ceil`. However, when `N` is a multiple of `f2`, `N // f2 + 1` is too large (the `+1` shouldn't be there) but using `N - 1` fixes this, and doesn't break the other case.
(This doesn't work for either `N`, `f2` less than or equal to 0, but that can handled separately)
Problem
I'm trying to divide some large numbers in Python but i'm getting some strange results ``` NStr = "7D5E9B01D4DCF9A4B31D61E62F0B679C79695ACA70BACF184518" \ "8BDF94B0B58FAF4A3E1C744C5F9BAB699ABD47BA842464EE93F4" \ "9B151CC354B21D53DC0C7FADAC44E8F4BDF078F935D9D07A2C07" \ "631D0DFB0B869713A9A83393CEC42D898516A28DDCDBEA13E87B" \ "1F874BC8DC06AF03F219CE2EA4050FA996D30CE351257287" N = long(NStr, 16) f2 = 476 fmin = N / float(f2) print N - (fmin * float(f2)) ``` This outputs as `0.0` as expected. However if I, for example, change the code to ``` fmin = N / float(f2) fmin += 1 ``` I still get an output of `0.0` I also tried using the decimal package ``` fmin = Decimal(N) / Decimal(f2) print Decimal(N) - (fmin * Decimal(f2)) ``` But that gives me an output of `-1.481136900397802034028076389E+280` I assume i'm not telling python how to handle the large numbers properly, but i'm stumped on where to go from here. I should also add that the end goal is to calculate ``` fmin = ceil(N / float(f2)) ``` as a long and as accurate as possible