Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>(I just wanted to add something to starblue's answer -- it's too long to fit into a comment.)</p> <p>I find it easier to see what's going on -- and I'm hoping you will too -- when I can see the full binary value of a double. I put starblue's examples in a C program and converted the output to binary (using my conversion program at <a href="http://www.exploringbinary.com/converting-floating-point-numbers-to-binary-strings-in-c/" rel="nofollow noreferrer">http://www.exploringbinary.com/converting-floating-point-numbers-to-binary-strings-in-c/</a> ). Here's the output, plus the result of the calculation:</p> <pre> x1 = 101.1100011000011010010000011001001011111001110000111 x2 = 101.11000110000110100100000110010010111110011100001111 c = 0.00101000101100101000111010100110011111010101111100001 r = 100100.01010001101110101101000101101100011111011010101 x1 = 10.111110011111001001111001011010001100001011001111011 x2 = 10.1111100111110010011110010110100011000010110011111 c = 0.0010011101001010001101101010001000011100110010101011 r = 10011.011001001001100010101001001110011100011111011111 x1 = 111.1111110010000001000100001110001111001101010100101 x2 = 111.11111100100000010001000011100011110011010101001011 c = 0.11010100111111110111100101001001011010110100010111011 r = 1001.100110010100010010100101110100000100000110000011 x1 = 0.0001110110111110011011000001011101101100111011010101 x2 = 0.00011101101111100110110000010111011011001110110101010001 c = 0.0001011111010000011100111111110000001001001011101001 r = 1.00111111101111011111001110101010100101010101010101 x1 = 0.1111110010001001000111110100110100001000001101111111 x2 = 0.11111100100010010001111101001101000010000011011111111 c = 0.01100111110011101011111010110111000101001011000000111 r = 10.011011101100011101000000101000110110101011010011111 x1 = 11.1111010101010010010000111001010000100001011000111 x2 = 11.111101010101001001000011100101000010000101100011101 c = 0.110000010101100101010010001010110001110001011111111 r = 101.00111101101010110100110000011111101001010010101111 x1 = 1.1010011101101111101110100000000000011110110111110111 x2 = 1.1010011101101111101110100000000000011110110111111 c = 0.00100101000111101100100101111110100101011010111111001 r = 1011.011010000011101100001011000110000010011111110001 x1 = 101.10111010001001010111100100111110000111100001000011 x2 = 101.101110100010010101111001001111100001111000010001 c = 0.101011101011001100001000111011000001111010111011011 r = 1000.0110010001110100001001010000000101111000011111011 x1 = 11.101101100010000001100111100010010100011000001001111 x2 = 11.10110110001000000110011110001001010001100000101 c = 0.0011011010000011101011110000001111000110010101111111 r = 10001.01101101110011010100011111101110101011001010001 x1 = 101.10101010000101110011111111101001111011111010101111 x2 = 101.1010101000010111001111111110100111101111101011 c = 0.1011000110001100100111111010011000000010100011 r = 1000.0010101011010001010101111000111101110100001000001 </pre> <p>(BTW, the "* const" part of the expression is unnecessary: the division by const alone shows that X1 / const == X2 / const.)</p> <p>You can really see what's going on when you compare the double values with the true, arbitrary precision values. Take the first example, for instance:</p> <pre> x1/c = x2/c (double) = 100100.01010001101110101101000101101100011111011010101 x1/c (true) = 100100.01010001101110101101000101101100011111011010100 1011... x2/c (true) = 100100.01010001101110101101000101101100011111011010101 0111... </pre> <p>I put a space between significant bits 53 and 54, where the rounding occurs in a double. x1/c rounds up, and x2/c rounds down (truncates), becoming the same value.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload