You didn't tell us the answers to the riddles. Or did I miss them. On Thursday, 21 August 2014 01:47:04 UTC+2, rjf wrote: > > > > On Saturday, August 9, 2014 7:35:13 PM UTC-7, Erik Massop wrote: >> >> .... >> > > >> Similarly I would call RealField(prec) a field, because it represents >> the field of real numbers (e.g. Dedekind cuts). At the same time I am >> sure that some mathematical properties that I know from the mathematical >> field of real numbers will not hold in RealField(prec). > > > So it seems to me that you should not call it a Field. > > Here's the inverse. Or maybe contrapositive. As a riddle: > > How many legs does a sheep have if you call its tail a leg? > (Answer later...) > > >> Luckily Sage >> readily admits that RealField(prec) is not an exact representation of >> the mathematical field of real numbers: >> sage: F = RealField(100) >> sage: F.is_exact() >> False >> > > Hardly luck, but random insertion of a fact in a way similar to the riddle. > (Answer later) > > >> >> I agree that it is imprecise that when using F.is_field(), we are >> asking whether the mathematical object of real numbers is a field, while >> when using F.is_exact() we are asking whether the representation is >> exact. >> >> By the way, there also is AA or AlgebraicRealField() in Sage, which is >> an exact representation of the real closed field of algebraic real >> numbers. >> >> ... >> > The domain of arbitrary-precision integers is an excellent model of >> > the ring of integers. It is true that one can specify a computation >> > that would fill up the memory of all the computers in existence. or >> > even all the atoms in the (known?) universe. Presumably a >> > well-constructed support system will give an error message on much >> > smaller examples. I assume that your Real Field operation of >> > division would give an error if the result is inexact. >> >> RealField(prec) is an inexact approximation of a field (as witnessed by >> is_exact), so I never expect the division to be exact. > > > Oh, so it just gives wrong answers without a clue. > > >> In fact I don't >> expect addition, negation, multiplication, or subtraction to be exact >> either. Indeed, they are not exact: >> sage: a = 1e-58 >> sage: a >> 1.00000000000000e-58 >> sage: (1+a)-1 >> 0.000000000000000 >> > > That's because it is not a field, and you know it. So why call it a field? > > >> >> > > > > > Does Sage have other um, approximations, in its nomenclature? >> > > > > >> > > > > Sure. RealField(123)[x]. Power series rings. P-adics. >> > > > >> > > > These approximations are approximations by their nature. If you >> > > > are computing with a power series, the concept inherently includes >> > > > an error term which you are aware of. Real Field is (so far as I >> > > > know) a concept that should have the properties of a field. The >> > > > version in Sage does not. It's like saying someone isn't pregnant. >> > > > well only a little pregnant. >> > > >> > > They're no more approximate by nature than the real numbers. >> > >> > Huh? How so? I was not aware that real numbers (at least the ones >> > that you can construct) are approximate by nature. But maybe you >> > can direct me to some reference on this. >> >> What do you mean by "can construct"? The computable reals perhaps? Those >> would indeed form an actual field. I am very unsure about how practical >> they are though. >> > > How about the rational numbers? Those you can easily construct. > The computable reals are not fun to compute with in most "application" > circumstances. > > >> >> Might we then not also have a ring of computable power series? That is, >> those power series given by an algorithm that given n returns the n'th >> term in finite time? >> > > It is not usually phrased that way, but given a collection of base > functions as explicit power series > and operations like composition, there is a computational domain of > truncated power series. > It is usually set up to NOT be a ring because of truncation issues. > > >> ... >> > > Power series (to make things concrete, say the power series in one >> > > variable over the integers) form a ring. > > For any choice of >> > > representation some of them can be represented exactly on a >> > > computer, most can't. When doing computations with power series one >> > > is typically chooses a precision (e.g. how many terms, not unlike a >> > > choice of number of bits) to use. >> > >> > Truncated power series with coefficients that are typically exact >> > rational numbers (but could be, you say , elements of a finite field) >> > form a computation structure that has exact operations. Just because >> > you associate some other concept that is outside the computer with >> > that TPS doesn't mean the TPS is approximate. >> >> I would argue that a ring of truncated power series with rational >> coefficients is an inexact representation of the ring of (untruncated) >> power series with rational coefficients, just as RealField(prec) is an >> inexact representation of the field of real numbers. >> > > Well then, I would argue that it is not. It is a computational domain > with its own useful properties that can be nicely characterized, and > happens not to be a ring. > > >> >> It is important to realize that my use of "inexact" here refers to >> TPS/RealField(prec) as a representation of the ring of (untruncated) >> power series with rational coefficients/the field of real numbers, and >> not to TPS/RealField(prec) itself. >> > > Basically, this is analogous to saying that floating point numbers > form a field, which they don't. Let the coefficients be 0 or 1, and the > base of the power series x is 1/2. > > or maybe p-adics. > > >> >> The object PowerSeriesRing(QQ, 'x') in Sage is not a ring of truncated >> power series QQ[x]/x^n. In it not a ring at all. In fact == is not even >> transitive: >> sage: R.<x> = PowerSeriesRing(QQ, 'x') >> sage: a = O(x^20) >> sage: a in R >> True >> sage: (0 == x^30 + a) and (x^30 + a == x^30) >> True >> sage: 0 == x^30 >> False >> >> > As is the case for every computer algebra system I know about that > implements > truncated power series. Incidentally, Macsyma implements a different, > additional, notion > of power series wehre they are represented by a formula for the arbitrary > nth term. > > Since we agree that TPS do not form a ring, why does Sage lie about it? > > > > >> > > Real numbers form a field. For any choice of representation some of >> > > them can be represented exactly on a computer, most can't. When >> > > doing computations with real numbers... >> > >> > So you would say that 3 is approximate, because maybe it is pi, but pi >> > cannot be represented as an integer. This point of view seems to me >> > to be peculiar. >> >> Indeed, I would argue that 3 in RealField(100) is approximate. > > > I can't see why you would think so. > > >> For >> instance the (computable) real number 3.00...001, where the ellipsis is >> 1000 zeroes, gets mapped to 3 in RealField(100), but is not equal to 3 >> as an actual real number. >> > > So the number k = 3.000....1 is not in RealField(100). Who cares? > That does not justify treating 3 as a huge fuzzball. > After all if you believe that all the numbers in RealField are fuzzballs, > why not represent k as the number 5 in RealField(100)? > Do you have a theory of error in RealField(100)? I suspect not. > > >> When speaking of exact/inexact I think it is important, to keep track of >> what is to be represented. > > Nope. > Absolute nonsense. > > Arithmetic is done on what you are given, not on what someone in the back > room is thinking. > If you want to compute with numbers that have error bounds or error > distributions, there > are ways of representing them and doing arithmetic on them. > > >> Hence the element 3 of RealField(100) is an >> inexact approximation of a real number since there are many reals that >> become 3 in RealField(100). > > > Nonsense. > > >> The element 3 of IntegerRing() is an exact >> approximation of an integer, since there is only one integer that >> becomes 3 in IntegerRing(). >> > > Why do you know that? What if the integer is read off a (weight) scale > that > has gradations at (say) 150, 155, 160, ... and so the integers > 153,154,155,156,157 all become 155. > > >> .... >> > > to only being able to read 3 significant (decimal) figures. >> > >> > (RJF said this....) > >> > Actually this analogy is false. The 3 digits (sometimes 4) from a >> > slide rule are the best that can be read out because of the inherent >> > uncertainty in the rulings and construction of the slide rule, the >> > human eye reading the lines, etc. So if I read my slide rule and say >> > 0.25 it is because I think it is closer to 0.25 than 0.24 or 0.26 >> > There is uncertainty there. If a floating point number is computed as >> > 0.25, there is no uncertainty in the representation per se. It is >> > 1/4, exactly a binary fraction, etc. Now you could use this >> > representation in various ways, e.g. 0.25+-0.01 storing 2 numbers >> > representing a center and a "radius" or an interval or ..../ But the >> > floating point number itself is simply a computer representation of a >> > particular rational number aaa x 2^bbb Nothing more, nothing less. >> > And in particular it does NOT mean that bits 54,55,56... are >> > uncertain. Those bits do not exist in the representation and are >> > irrelevant for ascertaining the value of the number aaa x 2^bbb. >> > >> > So the analogy is false. >> >> I think it is again important to remember what is to be represented. If >> you use floats to express numbers of the form aaa x 2^bbb (with >> appropriate conditions on aaa and bbb), then sure, floats are an exact >> representation. However there are many real numbers that are not of >> this form. > > > So you cannot represent them, and it is mostly pointless to discuss what > you would do with them arithmetically. If I said that I can't represent a > shoe in floating-point, and then proceeded to describe how to do arithmetic > on shoes, socks, etc, you would probably find this dubious. > > >> So, if you use floats for real numbers, then they are an >> inexact representation. In that case the bits 54, 55, 56, ... of the >> real number are lost in the 53 bit floating point representation. Hence >> given the 53 bit floating point representation, the bits 54, 55, >> 56, ... of the real number that it is supposed to represent, are indeed >> uncertain. (This is simplified since the bit-numbering depends on the >> exponent.) >> > > No they are not uncertain. They are not represented at all. They are > not part of the number. If I told you that 3 was of uncertain color -- > it might be red, blue, green or some combination, would that enhance > your arithmetic? > > > >> >> If you happen to know that the real number that is represented is of the >> form aaa x 2^bbb (with appropriate conditions on aaa and bbb), then you >> can reconstruct all those extra bits, and the representation is arguably >> exact. > > > No, the number in the computer is exactly the number that is the number. > It is not > some other number. > > But how should Sage know that the represented real number is of >> this form? >> > > Because that is the number in the computer. If you want to represent a > range, > you might use two numbers. If the computer numbers are fuzzballs , you > cannot > represent a range because the endpoints are fuzzballs, so you need a > range for > them. Infinite recursion to represent one "real" number? Eh, not such a > great idea. > > > >> ... >> > > Or are you seriously proposing when adding 3.14159 and 1e-100 it >> > > makes more sense, by default, to pad the left hand side with zeros >> > > (whether in binary or decimal) and return 3.1415900000...0001 as the >> > > result? >> > >> > If you did so, you would preserve the identity (a+b)-a = b >> >> How would the real number pi be represented in this system? Do you have >> to explicitly say that you want the first n digits? Or is the padding >> scheme smart enough to add pi's digits? In the latter case, how do you >> keep checking (in)equality efficient? >> > > Well, there is a large literature on how to represent large ranges with > acceptable > efficiency. Papers by Douglas Priest, and more recently, Jonathan > Shewchuk. > > The real number pi is not a computer-representable floating-point number > in base 2. > There are other numbers that can be represented, like 22/7. > >> >> How does (1/3)*3 give? Does it compare equal to 1? I mean, I would >> imagine 1/3 to be 0.333..., with more digits 3 as I need them, coming >> from larger and larger 0 paddings of 1 and 3. Supposing this, (1/3)*3 >> would be 0.999..., with more digits 9 as I need them. Will comparing >> with 1 ever finish? >> >> ... >> > Now if the user specified the kind of arithmetic explicitly, or even >> > implicitly by saying "use IEEE754 binary floating point arithmetic >> > everywhere" then I could go along with that. >> >> I think you can specify this to some extend. At least >> sage: RealField? >> gives mentions opportunities to tweak precision and rounding. > > > There have been various efforts to axiomatize floating-point numbers. > I don't know if the Sage people refer to any of this, but calling something > RealField does not inspire confidence. > > >> You can >> use AA if you want exact arithmetic (of real algebraic numbers). I don't >> think there is a field of computable reals in Sage. >> > > I am not proposing to use computable reals in any practical sense. > Sort of like Sashimi. I am happy to look at it, but not eat it. > > >> >> ... >> > > > > > You seem to think that a number of low precision has some >> > > > > > inaccuracy or uncertainty. Which it doesn't. 0.5 is the same >> > > > > > number as 0.500000. Unless you believe that 0.5 is the >> > > > > > interval [0.45000000000....01, 0.549999..........9] which you >> > > > > > COULD believe -- some people do believe this. >> > > > > > But you probably don't want to ask them about scientific >> > > > > > computing. >> >> Again, I think you should keep track of ambient sets here. For sure, the >> real numbers 0.5 and 0.5000000 are the same, and real numbers have no >> uncertainty (when representing real numbers). However, users do not type >> real numbers. They type finite strings of characters that they probably >> mean to represent some real number. The _strings_ 0.5 and 0.5000000 are >> not the same. Hence it might be reasonable to assign different meaning >> to these strings, as long as the user also has a way to precisely >> express what is meant. Yet, I'm no expert on scientific computing, so I >> will leave this be. >> > > I think I finally agree with you on that last sentence. > >> >> ... >> > > > > There's 0.5 the real number equal to one divided by two. There's >> > > > > also 0.5 the IEEE floating point number, which is a >> > > > > representative for an infinite number of real numbers in a small >> > > > > interval. >> > > > >> > > > Can you cite a source for that last statement? While I suppose >> > > > you can decide anything you wish about your computer, the >> > > > (canonical?) explanation is that the IEEE ordinary floats >> > > > correspond to a subset of the EXACT rational numbers equal to >> > > > <some integer> X 2^<some integer> which is not an interval at all. >> > > > (there are also inf and nan things which are not ordinary in that >> > > > sense) >> > > > >> > > > So, citation? (And I don't mean citing a physicist, or someone >> > > > who learned his arithmetic in 4th grade and hasn't re-evaluated it >> > > > since. A legitimate numerical analyst.) >> >> I am not a numerical analyst, so perhaps the following is naive, but I >> would really like know where it is flawed or why my assumptions are >> unreasonable. >> >> I call a real number exactly representable when it occurs as an exact >> value of a float with some bounded number of bits for its exponent. >> Then when using floats to represent real numbers, you have to decide >> for each real number x by which exactly representable real number f(x) >> it should be represented. > > > OK, you are positing (a) not representable real number x and (b) > representable number y. > > You cannot compute representable e = x-y because then x is > representable by y+e. > > So whatever you mean by x you cannot represent. It because pointless to > talk about > it. > > > > >> I can think of two desirable properties: >> * exactly representable real numbers should be represented by >> themselves, >> > > All floating point numbers exactly represent themselves. > > >> * the relation <= should be preserved. >> These properties yield that for each exactly representable real number y >> the set {x real : f(x) = y} is an interval around y. > > > What's f? > > If you are doing interval arithmetic, please read up on it. the > literature is > for the most part quite accessible. > > >> Moreover this >> interval is contained in every interval (a, b) where a and b are exactly >> representable real numbers with a < y and y < b. >> >> Okay, we need some condition on the mantissa and exponent, for if the >> mantissa and exponent are allowed to be arbitrary integers, a function >> with these properties fails to exists: Let f be a partial function with >> the required properties, then the intervals {x real : f(x) = y}, being >> contained in the intervals (a,b) with a and b exactly representable >> with a < y < b, necessarily contain only y. Since there are only >> countable many exactly representable real numbers, each with preimage >> containing only itself, the domain of definition of f is countable. In >> particular f is not a total function. >> > > huh? I read this twice, and refuse to read it again. > > >> >> ... >> > What this means is that the numbers in the system A and b often come >> > from the real world and you don't know their true values, just the >> > values that you measured. >> > > > > >> > When you enter the data into the computer you put the values for A and >> > b that are the closest numbers to what you believe. A major question >> > in computational linear algebra is how to measure the sensitivity of >> > the computed solution to slight changes in the initial data. The >> > numbers used in solving the system are exactly the represented >> > floating-point numbers. >> > >> > > They're representatives for the actual (either unknown or impossible >> > > to represent) elements of your data. And, yes, they're also exact >> > > rational numbers--once again they can be both--but the point is that >> > > the input and output floating point numbers are viewed as >> > > perturbations of the (actual) real field elements you care about. >> > >> > That does not give you or anyone else permission to say "oh, this >> > data might not be right so instead of solving the system as best as >> > I can, I will use some off-hand rule to clip bits off, since it's just >> > a perturbation of something". No, you compute the best you can >> > with the data you have. >> >> You cannot just assume either that the data is exact. >> > > If you think that there is a better assumption that gives you more > information than > computing the best you can, plus condition numbers, you are free to offer > it > to the numerical linear algebra specialists who have been laboring under > this > model for, oh, 60 years. > > >> >> Also it makes more sense to me not to do the best you can, but the best >> you can do efficiently. Trying to do the best you can is of no use if it >> means running out of memory or taking a year. If doing things >> efficiently involves some clipping, then that's okay with me, >> especially if the clipping is configurable. > > > Since the cost of a floating-point operation is generally constant > these days, you do not get higher efficiency by zeroing-out trailing bits. > > Finding results to particular accuracy, e.g. finding a bounding interval > for the root of a > polynomial, can be done by specifying the polynomial and a width. In > this case > "the best" makes no sense. > > Assuming that floating-point numbers are dirty out of ignorance, without > context, > is fundamentally a bad idea. > > RJF > > >> >> >> Regards, >> >> Erik Massop >> >
-- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.