Why can't decimal numbers be represented exactly in binary?

前端 未结 20 3479
不知归路
不知归路 2020-11-21 05:15

There have been several questions posted to SO about floating-point representation. For example, the decimal number 0.1 doesn\'t have an exact binary representation, so it\'

20条回答
  •  醉酒成梦
    2020-11-21 05:50

    I'm surprised no one has stated this yet: use continued fractions. Any rational number can be represented finitely in binary this way.

    Some examples:

    1/3 (0.3333...)

    0; 3
    

    5/9 (0.5555...)

    0; 1, 1, 4
    

    10/43 (0.232558139534883720930...)

    0; 4, 3, 3
    

    9093/18478 (0.49209871198181621387596060179673...)

    0; 2, 31, 7, 8, 5
    

    From here, there are a variety of known ways to store a sequence of integers in memory.

    In addition to storing your number with perfect accuracy, continued fractions also have some other benefits, such as best rational approximation. If you decide to terminate the sequence of numbers in a continued fraction early, the remaining digits (when recombined to a fraction) will give you the best possible fraction. This is how approximations to pi are found:

    Pi's continued fraction:

    3; 7, 15, 1, 292 ...
    

    Terminating the sequence at 1, this gives the fraction:

    355/113

    which is an excellent rational approximation.

提交回复
热议问题