14 Mar 2003 11:37:46 -0500

Related articles |
---|

rational to floating point thant@acm.org (Thant Tessman) (2003-03-09) |

Re: rational to floating point chase@theworld.com (David Chase) (2003-03-14) |

Re: rational to floating point nmm1@cus.cam.ac.uk (2003-03-14) |

Re: rational to floating point thant@acm.org (Thant Tessman) (2003-03-14) |

Re: rational to floating point joachim_d@gmx.de (Joachim Durchholz) (2003-03-14) |

Re: rational to floating point ajo@andrew.cmu.edu (Arthur J. O'Dwyer) (2003-03-14) |

Re: rational to floating point gah@ugcs.caltech.edu (Glen Herrmannsfeldt) (2003-03-14) |

Re: rational to floating point tmk@netvision.net.il (2003-03-14) |

Re: rational to floating point Peter-Lawrence.Montgomery@cwi.nl (2003-03-14) |

Re: rational to floating point francis@thibault.org (John Stracke) (2003-03-14) |

From: | "Glen Herrmannsfeldt" <gah@ugcs.caltech.edu> |

Newsgroups: | comp.compilers |

Date: | 14 Mar 2003 11:37:46 -0500 |

Organization: | AT&T Broadband |

References: | 03-03-035 |

Keywords: | arithmetic |

Posted-Date: | 14 Mar 2003 11:37:46 EST |

(snip)

*> I'd like it to display rational*

*> numbers as floating-point numbers whenever the conversion to floating*

*> point won't produce an infinite (repeating) stream of digits.*

*>*

*> The question is: Under what conditions will a rational number produce*

*> an infinite stream of digits for a given base? What I've come up with*

*> is this:*

*>*

*> Converting a rational number to a floating point value is equivalent*

*> to multiplying the numerator and denominator by some number that*

*> converts the denominator to a whole-number power of the base. That is:*

*> b^n = c * d where 'b' is the base, 'd' is the denominator, and 'n' and*

*> 'c' are some whole numbers that satisfy the equation.*

*>*

*> I think there is no solution to the above equation if the denominator*

*> of the original rational number and the base contain no prime factors*

*> in common.*

I think you understand, but wrote the wrong thing.

The prime factors of the denominator must all be prime factors of the

base. Consider the decimal fraction 1/10. The prime factors of the

denominator are 2 and 5. Its representation is terminating in any

base containing prime factors of both 2 and 5. In binary, octal, or

hexadecimal, with only prime factor of 2, it is repeating. In base

20, 30, 40, or 50, for example, it is terminating.

Note that the base can have extra prime factors.

*> And I think that this in turn implies that if and only if gcd(d,b)*

*> is 1 and 'd' is not 1, then the original rational number can only be*

*> represented by an infinite stream of digits.*

If, but not only if. First, note that gcd(10,2) is 2, but 1/10th can

only be represented as a repeating binary fraction. Also note that

any terminating fraction can also be represented as a repeating

fraction, with trailing (b-1) digits.

(snip)

-- glen

Post a followup to this message

Return to the
comp.compilers page.

Search the
comp.compilers archives again.