Can windows calculator convert decimal fractions to binary?
Suppose I have a fractional decimal number like 0.21
Can the windows calculator convert that to binary?
If I try to type in 0.21 while in programmer mode, it doesn't respond to the decimal point. It's like I can't type in a decimal point in programmer mode.. And I can't type a binary point in programmer mode either when I select binary within programmer mode. The 'point' seems to be disabled.
I am using windows 7. I don't know if this has been enabled in windows 10?
Added
Or how about a simpler example like 2.5 or 5.125 So, a fractional part that can be represented in binary? So for 2.5 that calc should show 010.10 or 1.10*2^3. Or for 5.125 the calc should show 0101.001 or 1.01001*2^5 Can the windows calculator show that?
windows-7 calculator
add a comment |
Suppose I have a fractional decimal number like 0.21
Can the windows calculator convert that to binary?
If I try to type in 0.21 while in programmer mode, it doesn't respond to the decimal point. It's like I can't type in a decimal point in programmer mode.. And I can't type a binary point in programmer mode either when I select binary within programmer mode. The 'point' seems to be disabled.
I am using windows 7. I don't know if this has been enabled in windows 10?
Added
Or how about a simpler example like 2.5 or 5.125 So, a fractional part that can be represented in binary? So for 2.5 that calc should show 010.10 or 1.10*2^3. Or for 5.125 the calc should show 0101.001 or 1.01001*2^5 Can the windows calculator show that?
windows-7 calculator
This is because you cannot represent fractions in binary.
– Keltari
Nov 27 '17 at 21:49
Not entirely correct. You can, but Windows calculator doesn't show. When we see a number, say123
, we don't even think this way, but in reality, the number can be broken down into1*10^2 + 2*10^1 + 10^0
, by the same logic,123.45
is1*10^2 + 2*10^1 + 3*10^0 + 4*10^(-1) + 5*10^(-2)
. The exact same thing happens with the binary math, except you only have 2 digits (represented by0
and1
) and the base of the system is2
, not10
. So0.21
could be viewed as0.0011010111
which is approximated as0.209961
, I only did 10 binary digits, IEEE-754 standard specifies a lot more...
– nurchi
Nov 27 '17 at 22:55
@nurchi You mean that Keltari is not correct. You're replying to Keltari not to me, so please write AT Keltari at the start of your comment, so it's clear you were referring to him and not to me
– barlop
Nov 28 '17 at 3:49
Seems like I cannot edit my comment anymore, but yes, I was referring to @Keltari's comment, not the question itself.
– nurchi
Dec 15 '17 at 20:29
add a comment |
Suppose I have a fractional decimal number like 0.21
Can the windows calculator convert that to binary?
If I try to type in 0.21 while in programmer mode, it doesn't respond to the decimal point. It's like I can't type in a decimal point in programmer mode.. And I can't type a binary point in programmer mode either when I select binary within programmer mode. The 'point' seems to be disabled.
I am using windows 7. I don't know if this has been enabled in windows 10?
Added
Or how about a simpler example like 2.5 or 5.125 So, a fractional part that can be represented in binary? So for 2.5 that calc should show 010.10 or 1.10*2^3. Or for 5.125 the calc should show 0101.001 or 1.01001*2^5 Can the windows calculator show that?
windows-7 calculator
Suppose I have a fractional decimal number like 0.21
Can the windows calculator convert that to binary?
If I try to type in 0.21 while in programmer mode, it doesn't respond to the decimal point. It's like I can't type in a decimal point in programmer mode.. And I can't type a binary point in programmer mode either when I select binary within programmer mode. The 'point' seems to be disabled.
I am using windows 7. I don't know if this has been enabled in windows 10?
Added
Or how about a simpler example like 2.5 or 5.125 So, a fractional part that can be represented in binary? So for 2.5 that calc should show 010.10 or 1.10*2^3. Or for 5.125 the calc should show 0101.001 or 1.01001*2^5 Can the windows calculator show that?
windows-7 calculator
windows-7 calculator
edited Dec 18 '17 at 18:02
asked Nov 27 '17 at 21:39
barlop
15.3k2287145
15.3k2287145
This is because you cannot represent fractions in binary.
– Keltari
Nov 27 '17 at 21:49
Not entirely correct. You can, but Windows calculator doesn't show. When we see a number, say123
, we don't even think this way, but in reality, the number can be broken down into1*10^2 + 2*10^1 + 10^0
, by the same logic,123.45
is1*10^2 + 2*10^1 + 3*10^0 + 4*10^(-1) + 5*10^(-2)
. The exact same thing happens with the binary math, except you only have 2 digits (represented by0
and1
) and the base of the system is2
, not10
. So0.21
could be viewed as0.0011010111
which is approximated as0.209961
, I only did 10 binary digits, IEEE-754 standard specifies a lot more...
– nurchi
Nov 27 '17 at 22:55
@nurchi You mean that Keltari is not correct. You're replying to Keltari not to me, so please write AT Keltari at the start of your comment, so it's clear you were referring to him and not to me
– barlop
Nov 28 '17 at 3:49
Seems like I cannot edit my comment anymore, but yes, I was referring to @Keltari's comment, not the question itself.
– nurchi
Dec 15 '17 at 20:29
add a comment |
This is because you cannot represent fractions in binary.
– Keltari
Nov 27 '17 at 21:49
Not entirely correct. You can, but Windows calculator doesn't show. When we see a number, say123
, we don't even think this way, but in reality, the number can be broken down into1*10^2 + 2*10^1 + 10^0
, by the same logic,123.45
is1*10^2 + 2*10^1 + 3*10^0 + 4*10^(-1) + 5*10^(-2)
. The exact same thing happens with the binary math, except you only have 2 digits (represented by0
and1
) and the base of the system is2
, not10
. So0.21
could be viewed as0.0011010111
which is approximated as0.209961
, I only did 10 binary digits, IEEE-754 standard specifies a lot more...
– nurchi
Nov 27 '17 at 22:55
@nurchi You mean that Keltari is not correct. You're replying to Keltari not to me, so please write AT Keltari at the start of your comment, so it's clear you were referring to him and not to me
– barlop
Nov 28 '17 at 3:49
Seems like I cannot edit my comment anymore, but yes, I was referring to @Keltari's comment, not the question itself.
– nurchi
Dec 15 '17 at 20:29
This is because you cannot represent fractions in binary.
– Keltari
Nov 27 '17 at 21:49
This is because you cannot represent fractions in binary.
– Keltari
Nov 27 '17 at 21:49
Not entirely correct. You can, but Windows calculator doesn't show. When we see a number, say
123
, we don't even think this way, but in reality, the number can be broken down into 1*10^2 + 2*10^1 + 10^0
, by the same logic, 123.45
is 1*10^2 + 2*10^1 + 3*10^0 + 4*10^(-1) + 5*10^(-2)
. The exact same thing happens with the binary math, except you only have 2 digits (represented by 0
and 1
) and the base of the system is 2
, not 10
. So 0.21
could be viewed as 0.0011010111
which is approximated as 0.209961
, I only did 10 binary digits, IEEE-754 standard specifies a lot more...– nurchi
Nov 27 '17 at 22:55
Not entirely correct. You can, but Windows calculator doesn't show. When we see a number, say
123
, we don't even think this way, but in reality, the number can be broken down into 1*10^2 + 2*10^1 + 10^0
, by the same logic, 123.45
is 1*10^2 + 2*10^1 + 3*10^0 + 4*10^(-1) + 5*10^(-2)
. The exact same thing happens with the binary math, except you only have 2 digits (represented by 0
and 1
) and the base of the system is 2
, not 10
. So 0.21
could be viewed as 0.0011010111
which is approximated as 0.209961
, I only did 10 binary digits, IEEE-754 standard specifies a lot more...– nurchi
Nov 27 '17 at 22:55
@nurchi You mean that Keltari is not correct. You're replying to Keltari not to me, so please write AT Keltari at the start of your comment, so it's clear you were referring to him and not to me
– barlop
Nov 28 '17 at 3:49
@nurchi You mean that Keltari is not correct. You're replying to Keltari not to me, so please write AT Keltari at the start of your comment, so it's clear you were referring to him and not to me
– barlop
Nov 28 '17 at 3:49
Seems like I cannot edit my comment anymore, but yes, I was referring to @Keltari's comment, not the question itself.
– nurchi
Dec 15 '17 at 20:29
Seems like I cannot edit my comment anymore, but yes, I was referring to @Keltari's comment, not the question itself.
– nurchi
Dec 15 '17 at 20:29
add a comment |
2 Answers
2
active
oldest
votes
@Keltari Generally, fraction value CAN be represented in binary, using kind of "binary point" (counterpart of decimal point). In fact, that is how real/double numbers are represented in computers (although usually binary point position is stored, instead of the "point character"). But remember: not all decimal fractions can be represented in binary form exactly - some rounding must be applied then, especially if only limited count of bits can be used (which is always true in real computer science world).
Unfortunatelly, windows calculator in programmer's mode operate on integer values only. A workaround to achieve your goal is like this:
In standard mode enter a decimal number (can be fractional) to convert, e.g. 0.21
Multiply it by 2 (keys: * 2 =)
Repeat step 2 (pressing = key alone, again and again), until you receive number which is integer - or very close to integer (see remark below).
IMPORTANT! Remember, how many times you multiplied initial value by 2 (in step 2 and repeated 3).
Switch to programmer's mode and enter value received after step 3, rounded to integer (unfortunately, that is not done automatically when switching mode, at least in Windows 10's Calculator app).
The binary representation of the integer number is shown. Imagine, the binary point is on the most right (after last binary digit). Then, move it left by as many positions as you have done multiplying in step 2 and 3. Add leading 0's as needed.
Example:
- Original value:
0.21
- Multiply it by 2 ten times - you get
215,04
. Assuming that it is close enough to an integer value (it is arbitrary decision!), you get the rounded integer of215
- Entering
215
in programmer's mode shows its binary representation:11010111
- Moving the binary point 10 places left, gives:
.0011010111
Remark: As I mentioned earlier, not all decimal fraction values can be represented exactly in binary form, so sometimes you must decide, what precision (approximation) satisfy your needs. In the example above, I assumed that rounding 215,04 to 215 is comparatively small "error" (below 1/5000), so 10 bits was enough to represent the original number. If I needed greater precision, I would make multiplying by 2 not ten, but maybe twenty times (result: 220200,96
rounded to 220201
as an integer) and would get 20-bits binary representation .00110101110000101001
(with "error" below 1/5000000).
BTW Usually count of bits used to represent data in computers is power of 2 - 8, 16, 32, 64, sometimes 48, etc. In such a case, you can simply use faster "multipling by 2" method in the calculator, suggested by you in comment below (*(2^n)
).
Very interesting.. a few observations.. A)step 2 can be sped up with the x^y button on the window calculator. in scientific mode. e.g. 0.21*2^30 The integer part of that number can then be converted to binary in the windows calculator. B)Where you wrote "multiply it 10 times by 2" I think you meant multiply it by 2 ten times, / 10 times, multiply it by 2, i.e. 2^10.
– barlop
Nov 28 '17 at 4:12
C)Interestingly I learnt a much slower method than your method, the method I learnt was each time you multiply it by two, if the number is <1 then write a 0 in your result string. If the number is >= 1, you subtract one and write a 1 in your result string. .
– barlop
Nov 28 '17 at 4:12
@barlop ad. A) Yes, using x^y operation is much faster, and is usefull if you know in advance, how many bits you are going to use for binary representation (y in the formula). ad. B) Sorry for any misleading expressions - English is not my mothers' language :-) - edited as you suggested
– AnSi
Nov 28 '17 at 9:51
Nice workaround, @AnSi
– nurchi
Dec 15 '17 at 20:34
There is no need to write in your first sentence that fractions "CAN" be represented in binary. I know they can. The only person that said they can't is one commenter "nurchi". But an answer is assumed to be addressed to the person that asked the question - me. So there is no need to so emphatically state something in your first sentence that I already agree with. That entire first sentence is superfluous. I even mentioned "binary point" in my question so i'm well aware of it
– barlop
Dec 18 '17 at 12:31
|
show 2 more comments
So the way fractions are represented in memory is according to the IEEE-754 standard for floating point numbers.
A number as simple as decimal 123 when stored as floating point number (e.g. 123.0) is actually stored as 1.921875 * 2^6 = 1.921875 * 64
Think of this as a scientific notation, which is a * 10^b
, where a must be [1, 10) (meaning from 1.0 up to, but not including 10, e.g. 9.999...8)
Your number 0.21
is stored in memory as 1.6799999475479126 * 2^(-3)
which is equivalent to 0.20999999344348907470703125
(windows calculator shows this as 0.209999993443489075
when calculating manually)
Any calculator that utilises this standard will store numbers in the same format (if it doesn't, excluding different endianness, it probably has a different way of storing floating point numbers, so when passing values from one piece of software/hardware to another, translation must happen, but this is a different topic altogether).
Now, to answer your question, while Windows calculator stores the numbers in this form, it hasn't been designed to show you the intermediate/raw values in the memory. If you really felt like it, you could use a memory viewing tool and spy on values as you type them in the calculator, but again, that is a different topic...
Check out https://www.h-schmidt.net/FloatConverter/IEEE754.html to have an idea of how the floating point numbers are stored and represented.
I notice this website gives a binary string for it, decimal-to-binary.com/… But it also an approxiation 'cos its string of 0.00110101110 is 1/8 + 1/16 + 1/64 + 1/256 + 1/512 + 1/1024 = (128/1024+64/1024+16/1024+4/1024+2/1024+1/1024)= 215/2014 = 0.2099609375 which is even less accurate than the approximation you gave.
– barlop
Nov 28 '17 at 3:53
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "3"
};
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
});
}
});
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%2fsuperuser.com%2fquestions%2f1272250%2fcan-windows-calculator-convert-decimal-fractions-to-binary%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
@Keltari Generally, fraction value CAN be represented in binary, using kind of "binary point" (counterpart of decimal point). In fact, that is how real/double numbers are represented in computers (although usually binary point position is stored, instead of the "point character"). But remember: not all decimal fractions can be represented in binary form exactly - some rounding must be applied then, especially if only limited count of bits can be used (which is always true in real computer science world).
Unfortunatelly, windows calculator in programmer's mode operate on integer values only. A workaround to achieve your goal is like this:
In standard mode enter a decimal number (can be fractional) to convert, e.g. 0.21
Multiply it by 2 (keys: * 2 =)
Repeat step 2 (pressing = key alone, again and again), until you receive number which is integer - or very close to integer (see remark below).
IMPORTANT! Remember, how many times you multiplied initial value by 2 (in step 2 and repeated 3).
Switch to programmer's mode and enter value received after step 3, rounded to integer (unfortunately, that is not done automatically when switching mode, at least in Windows 10's Calculator app).
The binary representation of the integer number is shown. Imagine, the binary point is on the most right (after last binary digit). Then, move it left by as many positions as you have done multiplying in step 2 and 3. Add leading 0's as needed.
Example:
- Original value:
0.21
- Multiply it by 2 ten times - you get
215,04
. Assuming that it is close enough to an integer value (it is arbitrary decision!), you get the rounded integer of215
- Entering
215
in programmer's mode shows its binary representation:11010111
- Moving the binary point 10 places left, gives:
.0011010111
Remark: As I mentioned earlier, not all decimal fraction values can be represented exactly in binary form, so sometimes you must decide, what precision (approximation) satisfy your needs. In the example above, I assumed that rounding 215,04 to 215 is comparatively small "error" (below 1/5000), so 10 bits was enough to represent the original number. If I needed greater precision, I would make multiplying by 2 not ten, but maybe twenty times (result: 220200,96
rounded to 220201
as an integer) and would get 20-bits binary representation .00110101110000101001
(with "error" below 1/5000000).
BTW Usually count of bits used to represent data in computers is power of 2 - 8, 16, 32, 64, sometimes 48, etc. In such a case, you can simply use faster "multipling by 2" method in the calculator, suggested by you in comment below (*(2^n)
).
Very interesting.. a few observations.. A)step 2 can be sped up with the x^y button on the window calculator. in scientific mode. e.g. 0.21*2^30 The integer part of that number can then be converted to binary in the windows calculator. B)Where you wrote "multiply it 10 times by 2" I think you meant multiply it by 2 ten times, / 10 times, multiply it by 2, i.e. 2^10.
– barlop
Nov 28 '17 at 4:12
C)Interestingly I learnt a much slower method than your method, the method I learnt was each time you multiply it by two, if the number is <1 then write a 0 in your result string. If the number is >= 1, you subtract one and write a 1 in your result string. .
– barlop
Nov 28 '17 at 4:12
@barlop ad. A) Yes, using x^y operation is much faster, and is usefull if you know in advance, how many bits you are going to use for binary representation (y in the formula). ad. B) Sorry for any misleading expressions - English is not my mothers' language :-) - edited as you suggested
– AnSi
Nov 28 '17 at 9:51
Nice workaround, @AnSi
– nurchi
Dec 15 '17 at 20:34
There is no need to write in your first sentence that fractions "CAN" be represented in binary. I know they can. The only person that said they can't is one commenter "nurchi". But an answer is assumed to be addressed to the person that asked the question - me. So there is no need to so emphatically state something in your first sentence that I already agree with. That entire first sentence is superfluous. I even mentioned "binary point" in my question so i'm well aware of it
– barlop
Dec 18 '17 at 12:31
|
show 2 more comments
@Keltari Generally, fraction value CAN be represented in binary, using kind of "binary point" (counterpart of decimal point). In fact, that is how real/double numbers are represented in computers (although usually binary point position is stored, instead of the "point character"). But remember: not all decimal fractions can be represented in binary form exactly - some rounding must be applied then, especially if only limited count of bits can be used (which is always true in real computer science world).
Unfortunatelly, windows calculator in programmer's mode operate on integer values only. A workaround to achieve your goal is like this:
In standard mode enter a decimal number (can be fractional) to convert, e.g. 0.21
Multiply it by 2 (keys: * 2 =)
Repeat step 2 (pressing = key alone, again and again), until you receive number which is integer - or very close to integer (see remark below).
IMPORTANT! Remember, how many times you multiplied initial value by 2 (in step 2 and repeated 3).
Switch to programmer's mode and enter value received after step 3, rounded to integer (unfortunately, that is not done automatically when switching mode, at least in Windows 10's Calculator app).
The binary representation of the integer number is shown. Imagine, the binary point is on the most right (after last binary digit). Then, move it left by as many positions as you have done multiplying in step 2 and 3. Add leading 0's as needed.
Example:
- Original value:
0.21
- Multiply it by 2 ten times - you get
215,04
. Assuming that it is close enough to an integer value (it is arbitrary decision!), you get the rounded integer of215
- Entering
215
in programmer's mode shows its binary representation:11010111
- Moving the binary point 10 places left, gives:
.0011010111
Remark: As I mentioned earlier, not all decimal fraction values can be represented exactly in binary form, so sometimes you must decide, what precision (approximation) satisfy your needs. In the example above, I assumed that rounding 215,04 to 215 is comparatively small "error" (below 1/5000), so 10 bits was enough to represent the original number. If I needed greater precision, I would make multiplying by 2 not ten, but maybe twenty times (result: 220200,96
rounded to 220201
as an integer) and would get 20-bits binary representation .00110101110000101001
(with "error" below 1/5000000).
BTW Usually count of bits used to represent data in computers is power of 2 - 8, 16, 32, 64, sometimes 48, etc. In such a case, you can simply use faster "multipling by 2" method in the calculator, suggested by you in comment below (*(2^n)
).
Very interesting.. a few observations.. A)step 2 can be sped up with the x^y button on the window calculator. in scientific mode. e.g. 0.21*2^30 The integer part of that number can then be converted to binary in the windows calculator. B)Where you wrote "multiply it 10 times by 2" I think you meant multiply it by 2 ten times, / 10 times, multiply it by 2, i.e. 2^10.
– barlop
Nov 28 '17 at 4:12
C)Interestingly I learnt a much slower method than your method, the method I learnt was each time you multiply it by two, if the number is <1 then write a 0 in your result string. If the number is >= 1, you subtract one and write a 1 in your result string. .
– barlop
Nov 28 '17 at 4:12
@barlop ad. A) Yes, using x^y operation is much faster, and is usefull if you know in advance, how many bits you are going to use for binary representation (y in the formula). ad. B) Sorry for any misleading expressions - English is not my mothers' language :-) - edited as you suggested
– AnSi
Nov 28 '17 at 9:51
Nice workaround, @AnSi
– nurchi
Dec 15 '17 at 20:34
There is no need to write in your first sentence that fractions "CAN" be represented in binary. I know they can. The only person that said they can't is one commenter "nurchi". But an answer is assumed to be addressed to the person that asked the question - me. So there is no need to so emphatically state something in your first sentence that I already agree with. That entire first sentence is superfluous. I even mentioned "binary point" in my question so i'm well aware of it
– barlop
Dec 18 '17 at 12:31
|
show 2 more comments
@Keltari Generally, fraction value CAN be represented in binary, using kind of "binary point" (counterpart of decimal point). In fact, that is how real/double numbers are represented in computers (although usually binary point position is stored, instead of the "point character"). But remember: not all decimal fractions can be represented in binary form exactly - some rounding must be applied then, especially if only limited count of bits can be used (which is always true in real computer science world).
Unfortunatelly, windows calculator in programmer's mode operate on integer values only. A workaround to achieve your goal is like this:
In standard mode enter a decimal number (can be fractional) to convert, e.g. 0.21
Multiply it by 2 (keys: * 2 =)
Repeat step 2 (pressing = key alone, again and again), until you receive number which is integer - or very close to integer (see remark below).
IMPORTANT! Remember, how many times you multiplied initial value by 2 (in step 2 and repeated 3).
Switch to programmer's mode and enter value received after step 3, rounded to integer (unfortunately, that is not done automatically when switching mode, at least in Windows 10's Calculator app).
The binary representation of the integer number is shown. Imagine, the binary point is on the most right (after last binary digit). Then, move it left by as many positions as you have done multiplying in step 2 and 3. Add leading 0's as needed.
Example:
- Original value:
0.21
- Multiply it by 2 ten times - you get
215,04
. Assuming that it is close enough to an integer value (it is arbitrary decision!), you get the rounded integer of215
- Entering
215
in programmer's mode shows its binary representation:11010111
- Moving the binary point 10 places left, gives:
.0011010111
Remark: As I mentioned earlier, not all decimal fraction values can be represented exactly in binary form, so sometimes you must decide, what precision (approximation) satisfy your needs. In the example above, I assumed that rounding 215,04 to 215 is comparatively small "error" (below 1/5000), so 10 bits was enough to represent the original number. If I needed greater precision, I would make multiplying by 2 not ten, but maybe twenty times (result: 220200,96
rounded to 220201
as an integer) and would get 20-bits binary representation .00110101110000101001
(with "error" below 1/5000000).
BTW Usually count of bits used to represent data in computers is power of 2 - 8, 16, 32, 64, sometimes 48, etc. In such a case, you can simply use faster "multipling by 2" method in the calculator, suggested by you in comment below (*(2^n)
).
@Keltari Generally, fraction value CAN be represented in binary, using kind of "binary point" (counterpart of decimal point). In fact, that is how real/double numbers are represented in computers (although usually binary point position is stored, instead of the "point character"). But remember: not all decimal fractions can be represented in binary form exactly - some rounding must be applied then, especially if only limited count of bits can be used (which is always true in real computer science world).
Unfortunatelly, windows calculator in programmer's mode operate on integer values only. A workaround to achieve your goal is like this:
In standard mode enter a decimal number (can be fractional) to convert, e.g. 0.21
Multiply it by 2 (keys: * 2 =)
Repeat step 2 (pressing = key alone, again and again), until you receive number which is integer - or very close to integer (see remark below).
IMPORTANT! Remember, how many times you multiplied initial value by 2 (in step 2 and repeated 3).
Switch to programmer's mode and enter value received after step 3, rounded to integer (unfortunately, that is not done automatically when switching mode, at least in Windows 10's Calculator app).
The binary representation of the integer number is shown. Imagine, the binary point is on the most right (after last binary digit). Then, move it left by as many positions as you have done multiplying in step 2 and 3. Add leading 0's as needed.
Example:
- Original value:
0.21
- Multiply it by 2 ten times - you get
215,04
. Assuming that it is close enough to an integer value (it is arbitrary decision!), you get the rounded integer of215
- Entering
215
in programmer's mode shows its binary representation:11010111
- Moving the binary point 10 places left, gives:
.0011010111
Remark: As I mentioned earlier, not all decimal fraction values can be represented exactly in binary form, so sometimes you must decide, what precision (approximation) satisfy your needs. In the example above, I assumed that rounding 215,04 to 215 is comparatively small "error" (below 1/5000), so 10 bits was enough to represent the original number. If I needed greater precision, I would make multiplying by 2 not ten, but maybe twenty times (result: 220200,96
rounded to 220201
as an integer) and would get 20-bits binary representation .00110101110000101001
(with "error" below 1/5000000).
BTW Usually count of bits used to represent data in computers is power of 2 - 8, 16, 32, 64, sometimes 48, etc. In such a case, you can simply use faster "multipling by 2" method in the calculator, suggested by you in comment below (*(2^n)
).
edited Dec 6 at 15:12
answered Nov 27 '17 at 23:23
AnSi
363
363
Very interesting.. a few observations.. A)step 2 can be sped up with the x^y button on the window calculator. in scientific mode. e.g. 0.21*2^30 The integer part of that number can then be converted to binary in the windows calculator. B)Where you wrote "multiply it 10 times by 2" I think you meant multiply it by 2 ten times, / 10 times, multiply it by 2, i.e. 2^10.
– barlop
Nov 28 '17 at 4:12
C)Interestingly I learnt a much slower method than your method, the method I learnt was each time you multiply it by two, if the number is <1 then write a 0 in your result string. If the number is >= 1, you subtract one and write a 1 in your result string. .
– barlop
Nov 28 '17 at 4:12
@barlop ad. A) Yes, using x^y operation is much faster, and is usefull if you know in advance, how many bits you are going to use for binary representation (y in the formula). ad. B) Sorry for any misleading expressions - English is not my mothers' language :-) - edited as you suggested
– AnSi
Nov 28 '17 at 9:51
Nice workaround, @AnSi
– nurchi
Dec 15 '17 at 20:34
There is no need to write in your first sentence that fractions "CAN" be represented in binary. I know they can. The only person that said they can't is one commenter "nurchi". But an answer is assumed to be addressed to the person that asked the question - me. So there is no need to so emphatically state something in your first sentence that I already agree with. That entire first sentence is superfluous. I even mentioned "binary point" in my question so i'm well aware of it
– barlop
Dec 18 '17 at 12:31
|
show 2 more comments
Very interesting.. a few observations.. A)step 2 can be sped up with the x^y button on the window calculator. in scientific mode. e.g. 0.21*2^30 The integer part of that number can then be converted to binary in the windows calculator. B)Where you wrote "multiply it 10 times by 2" I think you meant multiply it by 2 ten times, / 10 times, multiply it by 2, i.e. 2^10.
– barlop
Nov 28 '17 at 4:12
C)Interestingly I learnt a much slower method than your method, the method I learnt was each time you multiply it by two, if the number is <1 then write a 0 in your result string. If the number is >= 1, you subtract one and write a 1 in your result string. .
– barlop
Nov 28 '17 at 4:12
@barlop ad. A) Yes, using x^y operation is much faster, and is usefull if you know in advance, how many bits you are going to use for binary representation (y in the formula). ad. B) Sorry for any misleading expressions - English is not my mothers' language :-) - edited as you suggested
– AnSi
Nov 28 '17 at 9:51
Nice workaround, @AnSi
– nurchi
Dec 15 '17 at 20:34
There is no need to write in your first sentence that fractions "CAN" be represented in binary. I know they can. The only person that said they can't is one commenter "nurchi". But an answer is assumed to be addressed to the person that asked the question - me. So there is no need to so emphatically state something in your first sentence that I already agree with. That entire first sentence is superfluous. I even mentioned "binary point" in my question so i'm well aware of it
– barlop
Dec 18 '17 at 12:31
Very interesting.. a few observations.. A)step 2 can be sped up with the x^y button on the window calculator. in scientific mode. e.g. 0.21*2^30 The integer part of that number can then be converted to binary in the windows calculator. B)Where you wrote "multiply it 10 times by 2" I think you meant multiply it by 2 ten times, / 10 times, multiply it by 2, i.e. 2^10.
– barlop
Nov 28 '17 at 4:12
Very interesting.. a few observations.. A)step 2 can be sped up with the x^y button on the window calculator. in scientific mode. e.g. 0.21*2^30 The integer part of that number can then be converted to binary in the windows calculator. B)Where you wrote "multiply it 10 times by 2" I think you meant multiply it by 2 ten times, / 10 times, multiply it by 2, i.e. 2^10.
– barlop
Nov 28 '17 at 4:12
C)Interestingly I learnt a much slower method than your method, the method I learnt was each time you multiply it by two, if the number is <1 then write a 0 in your result string. If the number is >= 1, you subtract one and write a 1 in your result string. .
– barlop
Nov 28 '17 at 4:12
C)Interestingly I learnt a much slower method than your method, the method I learnt was each time you multiply it by two, if the number is <1 then write a 0 in your result string. If the number is >= 1, you subtract one and write a 1 in your result string. .
– barlop
Nov 28 '17 at 4:12
@barlop ad. A) Yes, using x^y operation is much faster, and is usefull if you know in advance, how many bits you are going to use for binary representation (y in the formula). ad. B) Sorry for any misleading expressions - English is not my mothers' language :-) - edited as you suggested
– AnSi
Nov 28 '17 at 9:51
@barlop ad. A) Yes, using x^y operation is much faster, and is usefull if you know in advance, how many bits you are going to use for binary representation (y in the formula). ad. B) Sorry for any misleading expressions - English is not my mothers' language :-) - edited as you suggested
– AnSi
Nov 28 '17 at 9:51
Nice workaround, @AnSi
– nurchi
Dec 15 '17 at 20:34
Nice workaround, @AnSi
– nurchi
Dec 15 '17 at 20:34
There is no need to write in your first sentence that fractions "CAN" be represented in binary. I know they can. The only person that said they can't is one commenter "nurchi". But an answer is assumed to be addressed to the person that asked the question - me. So there is no need to so emphatically state something in your first sentence that I already agree with. That entire first sentence is superfluous. I even mentioned "binary point" in my question so i'm well aware of it
– barlop
Dec 18 '17 at 12:31
There is no need to write in your first sentence that fractions "CAN" be represented in binary. I know they can. The only person that said they can't is one commenter "nurchi". But an answer is assumed to be addressed to the person that asked the question - me. So there is no need to so emphatically state something in your first sentence that I already agree with. That entire first sentence is superfluous. I even mentioned "binary point" in my question so i'm well aware of it
– barlop
Dec 18 '17 at 12:31
|
show 2 more comments
So the way fractions are represented in memory is according to the IEEE-754 standard for floating point numbers.
A number as simple as decimal 123 when stored as floating point number (e.g. 123.0) is actually stored as 1.921875 * 2^6 = 1.921875 * 64
Think of this as a scientific notation, which is a * 10^b
, where a must be [1, 10) (meaning from 1.0 up to, but not including 10, e.g. 9.999...8)
Your number 0.21
is stored in memory as 1.6799999475479126 * 2^(-3)
which is equivalent to 0.20999999344348907470703125
(windows calculator shows this as 0.209999993443489075
when calculating manually)
Any calculator that utilises this standard will store numbers in the same format (if it doesn't, excluding different endianness, it probably has a different way of storing floating point numbers, so when passing values from one piece of software/hardware to another, translation must happen, but this is a different topic altogether).
Now, to answer your question, while Windows calculator stores the numbers in this form, it hasn't been designed to show you the intermediate/raw values in the memory. If you really felt like it, you could use a memory viewing tool and spy on values as you type them in the calculator, but again, that is a different topic...
Check out https://www.h-schmidt.net/FloatConverter/IEEE754.html to have an idea of how the floating point numbers are stored and represented.
I notice this website gives a binary string for it, decimal-to-binary.com/… But it also an approxiation 'cos its string of 0.00110101110 is 1/8 + 1/16 + 1/64 + 1/256 + 1/512 + 1/1024 = (128/1024+64/1024+16/1024+4/1024+2/1024+1/1024)= 215/2014 = 0.2099609375 which is even less accurate than the approximation you gave.
– barlop
Nov 28 '17 at 3:53
add a comment |
So the way fractions are represented in memory is according to the IEEE-754 standard for floating point numbers.
A number as simple as decimal 123 when stored as floating point number (e.g. 123.0) is actually stored as 1.921875 * 2^6 = 1.921875 * 64
Think of this as a scientific notation, which is a * 10^b
, where a must be [1, 10) (meaning from 1.0 up to, but not including 10, e.g. 9.999...8)
Your number 0.21
is stored in memory as 1.6799999475479126 * 2^(-3)
which is equivalent to 0.20999999344348907470703125
(windows calculator shows this as 0.209999993443489075
when calculating manually)
Any calculator that utilises this standard will store numbers in the same format (if it doesn't, excluding different endianness, it probably has a different way of storing floating point numbers, so when passing values from one piece of software/hardware to another, translation must happen, but this is a different topic altogether).
Now, to answer your question, while Windows calculator stores the numbers in this form, it hasn't been designed to show you the intermediate/raw values in the memory. If you really felt like it, you could use a memory viewing tool and spy on values as you type them in the calculator, but again, that is a different topic...
Check out https://www.h-schmidt.net/FloatConverter/IEEE754.html to have an idea of how the floating point numbers are stored and represented.
I notice this website gives a binary string for it, decimal-to-binary.com/… But it also an approxiation 'cos its string of 0.00110101110 is 1/8 + 1/16 + 1/64 + 1/256 + 1/512 + 1/1024 = (128/1024+64/1024+16/1024+4/1024+2/1024+1/1024)= 215/2014 = 0.2099609375 which is even less accurate than the approximation you gave.
– barlop
Nov 28 '17 at 3:53
add a comment |
So the way fractions are represented in memory is according to the IEEE-754 standard for floating point numbers.
A number as simple as decimal 123 when stored as floating point number (e.g. 123.0) is actually stored as 1.921875 * 2^6 = 1.921875 * 64
Think of this as a scientific notation, which is a * 10^b
, where a must be [1, 10) (meaning from 1.0 up to, but not including 10, e.g. 9.999...8)
Your number 0.21
is stored in memory as 1.6799999475479126 * 2^(-3)
which is equivalent to 0.20999999344348907470703125
(windows calculator shows this as 0.209999993443489075
when calculating manually)
Any calculator that utilises this standard will store numbers in the same format (if it doesn't, excluding different endianness, it probably has a different way of storing floating point numbers, so when passing values from one piece of software/hardware to another, translation must happen, but this is a different topic altogether).
Now, to answer your question, while Windows calculator stores the numbers in this form, it hasn't been designed to show you the intermediate/raw values in the memory. If you really felt like it, you could use a memory viewing tool and spy on values as you type them in the calculator, but again, that is a different topic...
Check out https://www.h-schmidt.net/FloatConverter/IEEE754.html to have an idea of how the floating point numbers are stored and represented.
So the way fractions are represented in memory is according to the IEEE-754 standard for floating point numbers.
A number as simple as decimal 123 when stored as floating point number (e.g. 123.0) is actually stored as 1.921875 * 2^6 = 1.921875 * 64
Think of this as a scientific notation, which is a * 10^b
, where a must be [1, 10) (meaning from 1.0 up to, but not including 10, e.g. 9.999...8)
Your number 0.21
is stored in memory as 1.6799999475479126 * 2^(-3)
which is equivalent to 0.20999999344348907470703125
(windows calculator shows this as 0.209999993443489075
when calculating manually)
Any calculator that utilises this standard will store numbers in the same format (if it doesn't, excluding different endianness, it probably has a different way of storing floating point numbers, so when passing values from one piece of software/hardware to another, translation must happen, but this is a different topic altogether).
Now, to answer your question, while Windows calculator stores the numbers in this form, it hasn't been designed to show you the intermediate/raw values in the memory. If you really felt like it, you could use a memory viewing tool and spy on values as you type them in the calculator, but again, that is a different topic...
Check out https://www.h-schmidt.net/FloatConverter/IEEE754.html to have an idea of how the floating point numbers are stored and represented.
answered Nov 27 '17 at 22:45
nurchi
18916
18916
I notice this website gives a binary string for it, decimal-to-binary.com/… But it also an approxiation 'cos its string of 0.00110101110 is 1/8 + 1/16 + 1/64 + 1/256 + 1/512 + 1/1024 = (128/1024+64/1024+16/1024+4/1024+2/1024+1/1024)= 215/2014 = 0.2099609375 which is even less accurate than the approximation you gave.
– barlop
Nov 28 '17 at 3:53
add a comment |
I notice this website gives a binary string for it, decimal-to-binary.com/… But it also an approxiation 'cos its string of 0.00110101110 is 1/8 + 1/16 + 1/64 + 1/256 + 1/512 + 1/1024 = (128/1024+64/1024+16/1024+4/1024+2/1024+1/1024)= 215/2014 = 0.2099609375 which is even less accurate than the approximation you gave.
– barlop
Nov 28 '17 at 3:53
I notice this website gives a binary string for it, decimal-to-binary.com/… But it also an approxiation 'cos its string of 0.00110101110 is 1/8 + 1/16 + 1/64 + 1/256 + 1/512 + 1/1024 = (128/1024+64/1024+16/1024+4/1024+2/1024+1/1024)= 215/2014 = 0.2099609375 which is even less accurate than the approximation you gave.
– barlop
Nov 28 '17 at 3:53
I notice this website gives a binary string for it, decimal-to-binary.com/… But it also an approxiation 'cos its string of 0.00110101110 is 1/8 + 1/16 + 1/64 + 1/256 + 1/512 + 1/1024 = (128/1024+64/1024+16/1024+4/1024+2/1024+1/1024)= 215/2014 = 0.2099609375 which is even less accurate than the approximation you gave.
– barlop
Nov 28 '17 at 3:53
add a comment |
Thanks for contributing an answer to Super User!
- 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%2fsuperuser.com%2fquestions%2f1272250%2fcan-windows-calculator-convert-decimal-fractions-to-binary%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
This is because you cannot represent fractions in binary.
– Keltari
Nov 27 '17 at 21:49
Not entirely correct. You can, but Windows calculator doesn't show. When we see a number, say
123
, we don't even think this way, but in reality, the number can be broken down into1*10^2 + 2*10^1 + 10^0
, by the same logic,123.45
is1*10^2 + 2*10^1 + 3*10^0 + 4*10^(-1) + 5*10^(-2)
. The exact same thing happens with the binary math, except you only have 2 digits (represented by0
and1
) and the base of the system is2
, not10
. So0.21
could be viewed as0.0011010111
which is approximated as0.209961
, I only did 10 binary digits, IEEE-754 standard specifies a lot more...– nurchi
Nov 27 '17 at 22:55
@nurchi You mean that Keltari is not correct. You're replying to Keltari not to me, so please write AT Keltari at the start of your comment, so it's clear you were referring to him and not to me
– barlop
Nov 28 '17 at 3:49
Seems like I cannot edit my comment anymore, but yes, I was referring to @Keltari's comment, not the question itself.
– nurchi
Dec 15 '17 at 20:29