My comments
Marcin 'Qrczak' Kowalczyk
(19 Oct 2005 18:37 UTC)
|
Re: My comments
Bradd W. Szonye
(19 Oct 2005 19:17 UTC)
|
Re: My comments
Thomas Bushnell BSG
(19 Oct 2005 19:44 UTC)
|
Re: My comments
Bradd W. Szonye
(19 Oct 2005 19:55 UTC)
|
Re: My comments
Thomas Bushnell BSG
(19 Oct 2005 20:11 UTC)
|
Re: My comments
John.Cowan
(19 Oct 2005 20:10 UTC)
|
Re: My comments
Thomas Bushnell BSG
(19 Oct 2005 20:13 UTC)
|
Re: My comments
Bradd W. Szonye
(19 Oct 2005 20:25 UTC)
|
Re: My comments
Marcin 'Qrczak' Kowalczyk
(19 Oct 2005 20:23 UTC)
|
Re: My comments
Bradd W. Szonye
(19 Oct 2005 20:36 UTC)
|
Re: My comments
Marcin 'Qrczak' Kowalczyk
(19 Oct 2005 21:36 UTC)
|
Re: My comments
Bradd W. Szonye
(19 Oct 2005 21:42 UTC)
|
Re: My comments
Bradd W. Szonye
(19 Oct 2005 22:08 UTC)
|
Exactness (was Re: My comments)
bear
(20 Oct 2005 01:50 UTC)
|
Re: Exactness
Thomas Bushnell BSG
(20 Oct 2005 03:45 UTC)
|
Re: Exactness
Marcin 'Qrczak' Kowalczyk
(20 Oct 2005 09:13 UTC)
|
Re: Exactness
Bradd W. Szonye
(20 Oct 2005 20:15 UTC)
|
Re: Exactness
bear
(20 Oct 2005 22:09 UTC)
|
Re: Exactness Marcin 'Qrczak' Kowalczyk (21 Oct 2005 02:08 UTC)
|
Re: Exactness
Thomas Bushnell BSG
(21 Oct 2005 03:05 UTC)
|
Re: Exactness
Marcin 'Qrczak' Kowalczyk
(21 Oct 2005 08:15 UTC)
|
Re: Exactness
Thomas Bushnell BSG
(21 Oct 2005 18:38 UTC)
|
Re: Exactness
Marcin 'Qrczak' Kowalczyk
(21 Oct 2005 20:12 UTC)
|
Re: Exactness
Thomas Bushnell BSG
(21 Oct 2005 20:29 UTC)
|
Re: Exactness
Marcin 'Qrczak' Kowalczyk
(21 Oct 2005 20:38 UTC)
|
Re: Exactness
Thomas Bushnell BSG
(21 Oct 2005 20:44 UTC)
|
Re: Exactness
Marcin 'Qrczak' Kowalczyk
(21 Oct 2005 21:20 UTC)
|
Re: Exactness
Thomas Bushnell BSG
(21 Oct 2005 21:44 UTC)
|
Re: Exactness
Marcin 'Qrczak' Kowalczyk
(21 Oct 2005 22:18 UTC)
|
Re: Exactness
Thomas Bushnell BSG
(21 Oct 2005 22:48 UTC)
|
Re: Exactness
Marcin 'Qrczak' Kowalczyk
(22 Oct 2005 00:34 UTC)
|
Re: Exactness
Thomas Bushnell BSG
(22 Oct 2005 01:02 UTC)
|
Re: Exactness
Per Bothner
(22 Oct 2005 00:59 UTC)
|
bear <xxxxxx@sonic.net> writes: >> Suppose we have two flonums tagged as exact. You divide them, and the >> result is not a finite binary fraction, so the implementation can't >> use the same representation for the result. What should it do? >> >> a) Represent it in a flonum tagged as inexact. >> b) Represent it as an exact ratio of two integers. > > c) consult settings or dynamic variables to see what the program > or user wants it to do. > d) give an exact result if the representation width needed for > it is allowed, otherwise give an inexact result with the > maximum representation width allowed by the current settings. > e) store a promise rather than an explicit numeric representation, > allowing the user to decide later how much precision they want > and propagating demands for precision into the branches of the > promise as necessary. > f) ... something else you haven't thought of. > g) ... something else *I* haven't thought of. In other words a portable program can't predict what will happen and can't state its requirements. This is bad. I know what to expect from IEEE floats. I know for example that calculations in a certain range of integers are exact. Or that numbers have the same relative precision but different absolute precision, for a wide range of magnitudes. Or that certain primitive operations take constant time, and a number uses a fixed amount of memory - it doesn't keep growing precision. I should be able to know more in Scheme - for example that by default a flonum overflow will not be fatal but will yield +inf.0, which will compare as greater than any other number except itself and +nan.0. I know what to expect from ratios. I don't know what to expect from inexact real numbers. Do they behave like floats, or like ratios with inexactness bit? It does matter! >> And that's good, it's not orthogonal. If it was, using different >> representations for numbers of the same value and the same precision >> would be redundant. R5RS even specifies that such numbers would be >> indistinguishable (even more: the precision is not compared but the >> exactness only, which is wrong if there are several possible amounts >> of inexact precision, and SRFI-77 fixes that). > > Yes. They *should* be indistinguishable. What if they have different precisions? Imagine a Scheme implementation with two flonum formats, where (= 3s0 3L0) is #t but (= (/ 3s0) (/ 3L0)) is #f; this behavior should't be surprising. What should be (eqv? 3s0 3L0)? >> I presume then that since (factorial 100) preserves all 158 digits, >> you want (factorial 100.0) to produce a result with 158 digits but >> tagged as inexact, right? > > If there is a presumption in effect that inexact numbers in source > whose precision isn't given explicitly are known to 158 digits or more, > then yes, I'd want the result to 158 digits. If the presumption is > that inexact numbers in source whose precision isn't given explicitly > are known to just 20 digits, then I'd want the first 20 digits and > the magnitude. If the number was read as 100.0, how many digits are accurate? The person who entered the data into a file didn't specify the precision; usually you can't assume that only these 4 digits are accurate. You propose that the programmer can't be sure what will happen. if it was obtained by (exact->inexact 100), then all digits are accurate. You propose that the programmer should not be able to apply exact->inexact to inputs to ensure that the result will be obtained numerically while keeping time and space of individual operations constant. > Remember that R5RS' full numeric syntax, which virtually nobody takes > full advantage of, allows explicitly *telling* the system how much > precision a number has. It's not enough. How many digits will #i1/3 store? You propose that the programmer can't know whether there is a fixed number of digits at all. If somebody implements fancy numeric types with dynamically settable precision or with lazily computed digits, I want to use them explicitly - I don't want them to take over the syntax that virtually all other languages use for IEEE floating point. I want the precision and efficiency of computation to be predictable. >> Are there any implementations where it is? > > MITScheme, for one. There are probably a few others. Huh? Judging from the sources it doesn't do anyhting like this. For example exact->inexact converts everything to flonums or a complex of flonums. -- __("< Marcin Kowalczyk \__/ xxxxxx@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/