Reputation: 16974
So JavaScript integers are interally 64-bit floating values and hence can precisely support values from -253 to +253 (-9,007,199,254,740,992 to +9,007,199,254,740,992).
You can read all about it in our very interesting thread: What is JavaScript's Max Int? What's the highest Integer value a Number can go to without losing precision?
In my project I need 64-bit offsets into very large files. I can make these by combining a high and low pair of 32-bit values. I don't need the full 64-bit range so JavaScript's limits are fine.
But I'm not sure how to sanity-check that a given pair of 32-bit values wouldn't result in a number outside JavaScript's range.
How could I check against this? I assume it might be trickiest for numbers just outside this range.
Upvotes: 0
Views: 441
Reputation: 56809
We only need to check if there is any ON bit higher than the 53rd bit, or higher than the 21st bit of the high 32-bit part.
Just take the high 32-bit and &
with ~((1 << 21) - 1)
(this will clear all the lower 21-bit of the 32-bit) to check if there is any bit over the limit. The number will be inside the limit if the result is 0.
Upvotes: 2