9 Mar 2003 17:34:36 -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) |

[3 later articles] |

From: | Thant Tessman <thant@acm.org> |

Newsgroups: | comp.compilers |

Date: | 9 Mar 2003 17:34:36 -0500 |

Organization: | XMission http://www.xmission.com/ |

Keywords: | arithmetic, question |

Posted-Date: | 09 Mar 2003 17:34:36 EST |

This is a math question, but one I hope is relevant to this newsgroup.

I've been writing an interpreter for a functional programming language

in C++. One of the datatypes it supports is an arbitrary-precision

rational number type. Currently the interpreter displays rational

numbers as the ratio of two integers. 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. 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.

Is my reasoning sound? Is there a simpler test?

For the curious, a description and source for my interpreter can be

found at:

http://www.standarddeviance.com

My gratitude goes to folks in this newsgroup who have helped improve my

understanding of concepts I put to use building this.

-thant

Post a followup to this message

Return to the
comp.compilers page.

Search the
comp.compilers archives again.