Is integer division always equal to the floor of regular division?
For large quotients, integer division (//
) doesn't seem to be necessarily equal to the floor of regular division (math.floor(a/b)
).
According to Python docs (https://docs.python.org/3/reference/expressions.html - 6.7),
floor division of integers results in an integer; the result is that of mathematical division with the ‘floor’ function applied to the result.
However,
math.floor(648705536316023400 / 7) = 92672219473717632
648705536316023400 // 7 = 92672219473717628
'{0:.10f}'.format(648705536316023400 / 7)
yields '92672219473717632.0000000000', but the last two digits of the decimal part should be 28 and not 32.
python integer division floating-accuracy integer-division
New contributor
add a comment |
For large quotients, integer division (//
) doesn't seem to be necessarily equal to the floor of regular division (math.floor(a/b)
).
According to Python docs (https://docs.python.org/3/reference/expressions.html - 6.7),
floor division of integers results in an integer; the result is that of mathematical division with the ‘floor’ function applied to the result.
However,
math.floor(648705536316023400 / 7) = 92672219473717632
648705536316023400 // 7 = 92672219473717628
'{0:.10f}'.format(648705536316023400 / 7)
yields '92672219473717632.0000000000', but the last two digits of the decimal part should be 28 and not 32.
python integer division floating-accuracy integer-division
New contributor
add a comment |
For large quotients, integer division (//
) doesn't seem to be necessarily equal to the floor of regular division (math.floor(a/b)
).
According to Python docs (https://docs.python.org/3/reference/expressions.html - 6.7),
floor division of integers results in an integer; the result is that of mathematical division with the ‘floor’ function applied to the result.
However,
math.floor(648705536316023400 / 7) = 92672219473717632
648705536316023400 // 7 = 92672219473717628
'{0:.10f}'.format(648705536316023400 / 7)
yields '92672219473717632.0000000000', but the last two digits of the decimal part should be 28 and not 32.
python integer division floating-accuracy integer-division
New contributor
For large quotients, integer division (//
) doesn't seem to be necessarily equal to the floor of regular division (math.floor(a/b)
).
According to Python docs (https://docs.python.org/3/reference/expressions.html - 6.7),
floor division of integers results in an integer; the result is that of mathematical division with the ‘floor’ function applied to the result.
However,
math.floor(648705536316023400 / 7) = 92672219473717632
648705536316023400 // 7 = 92672219473717628
'{0:.10f}'.format(648705536316023400 / 7)
yields '92672219473717632.0000000000', but the last two digits of the decimal part should be 28 and not 32.
python integer division floating-accuracy integer-division
python integer division floating-accuracy integer-division
New contributor
New contributor
edited 4 hours ago
dan04
62.2k15134173
62.2k15134173
New contributor
asked 4 hours ago
Aditya Chanana
362
362
New contributor
New contributor
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
The reason the quotients in your test case are not equal is that in the math.floor(a/b)
case, the result is calculated with floating point arithmetic (IEEE-754 64-bit), which means there is a maximum precision. The quotient you have there is larger than the 253 limit above which floating point is no longer accurate up to the unit.
With the integer division however, Python uses its unlimited integer range, and so that result is correct.
add a comment |
You may be dealing with integral values that are too large to express exactly as floats. Your number is significantly larger than 2^53, which is where the gaps between adjacent floating point doubles start to get bigger than 1. So you lose some precision when doing the floating point division.
The integer division, on the other hand, is computed exactly.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Aditya Chanana is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53891566%2fis-integer-division-always-equal-to-the-floor-of-regular-division%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
The reason the quotients in your test case are not equal is that in the math.floor(a/b)
case, the result is calculated with floating point arithmetic (IEEE-754 64-bit), which means there is a maximum precision. The quotient you have there is larger than the 253 limit above which floating point is no longer accurate up to the unit.
With the integer division however, Python uses its unlimited integer range, and so that result is correct.
add a comment |
The reason the quotients in your test case are not equal is that in the math.floor(a/b)
case, the result is calculated with floating point arithmetic (IEEE-754 64-bit), which means there is a maximum precision. The quotient you have there is larger than the 253 limit above which floating point is no longer accurate up to the unit.
With the integer division however, Python uses its unlimited integer range, and so that result is correct.
add a comment |
The reason the quotients in your test case are not equal is that in the math.floor(a/b)
case, the result is calculated with floating point arithmetic (IEEE-754 64-bit), which means there is a maximum precision. The quotient you have there is larger than the 253 limit above which floating point is no longer accurate up to the unit.
With the integer division however, Python uses its unlimited integer range, and so that result is correct.
The reason the quotients in your test case are not equal is that in the math.floor(a/b)
case, the result is calculated with floating point arithmetic (IEEE-754 64-bit), which means there is a maximum precision. The quotient you have there is larger than the 253 limit above which floating point is no longer accurate up to the unit.
With the integer division however, Python uses its unlimited integer range, and so that result is correct.
answered 4 hours ago
trincot
117k1478109
117k1478109
add a comment |
add a comment |
You may be dealing with integral values that are too large to express exactly as floats. Your number is significantly larger than 2^53, which is where the gaps between adjacent floating point doubles start to get bigger than 1. So you lose some precision when doing the floating point division.
The integer division, on the other hand, is computed exactly.
add a comment |
You may be dealing with integral values that are too large to express exactly as floats. Your number is significantly larger than 2^53, which is where the gaps between adjacent floating point doubles start to get bigger than 1. So you lose some precision when doing the floating point division.
The integer division, on the other hand, is computed exactly.
add a comment |
You may be dealing with integral values that are too large to express exactly as floats. Your number is significantly larger than 2^53, which is where the gaps between adjacent floating point doubles start to get bigger than 1. So you lose some precision when doing the floating point division.
The integer division, on the other hand, is computed exactly.
You may be dealing with integral values that are too large to express exactly as floats. Your number is significantly larger than 2^53, which is where the gaps between adjacent floating point doubles start to get bigger than 1. So you lose some precision when doing the floating point division.
The integer division, on the other hand, is computed exactly.
answered 4 hours ago
interfect
1,331920
1,331920
add a comment |
add a comment |
Aditya Chanana is a new contributor. Be nice, and check out our Code of Conduct.
Aditya Chanana is a new contributor. Be nice, and check out our Code of Conduct.
Aditya Chanana is a new contributor. Be nice, and check out our Code of Conduct.
Aditya Chanana is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53891566%2fis-integer-division-always-equal-to-the-floor-of-regular-division%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown