Hi, >DISCLAIMER: If you do not want to be confused about Rebol language, stop >reading at this point or continue at your own risk. > The most useful informations (IMO) are the points 1 to 3 below:
1) The confusion already exists, because some statements heavily depend on the chosen terminology and both terminologies are used on this ML. 2) There is one practical difference I want to underline: The "implementation-dependent terminology" tries to describe the properties of "just one implementation". There is at least one implementation, for which almost every property described this way is wrong, while the implementation-independent description remains correct. 3) The article: http://www.fm.vslib.cz/~ladislav/rebol/identity.html uses the implementation independent terminology and contains my answer to: "What are Rebol values?" question as well as the complete proof that "The sameness of Rebol values doesn't depend on implementation." 4) now to discuss Romano's points: ... >So i must conclude that "1 is equal to every other 1" only in an human >head, not in the real world > > ... :-) .. >My thesis: "Rebol number are not mathematical number" > >The proof: > >x: 1 / 2e305 ;== 5E-306 >x = 0 ;== false >y: x + 1 - 1 ;== 0.0 >y = 0 ;== true > There are two ways to prove you wrong. The first one is "oversimplified" and uses an implementation dependent (i.e. wrong) type of reasoning: "There are at least two implementations of Rebol numbers in computers. The first one is little-endian and the second one is big-endian. Therefore your above statement has got no sense without saying which implementation you have got in mind." This is the reason why I put the smile above. Now a serious (and lengthy) one: Let's define a subset of all real numbers as follows: a real number X is an IEEE754 number if X is either 0 or if there is a real number S called sign, a real number M called significand and a real number E called exponent such that X = S * M * (2 ** E), where E is an integer number such that -1023 <= E <= 1022 , S is either 1 or -1 and M is a real number such that there is 52-element sequence of binary digits (0 or 1, bits for short) b1,b2,..., b52, such that M = 1 + (b1 / (2 ** 1)) + (b2 / (2 ** 2)) + ... + (b52 / (2 ** 52)). Note: all operations in the above definition are "normal" "mathematical" operations as defined for real numbers. Now let's define an IEEE754-round function "working" on a subset of real numbers as follows: - for X >= ((2 ** 1022) * (2 - (2 ** -52) + (2 ** -53))) the IEEE754-round function isn't defined - for 0 <= X < (2 ** -1023) we define that IEEE754-round X will be zero - for (2 ** -1023) <= X < ((2 ** 1022) * (2 - (2 ** -52) + (2 ** -53))) IEEE754-round X will be the maximal of all IEEE754 numbers Z such that abs(X - Z) <= abs (X - U) for every IEEE754 number U. - similarly for negative values X. As the last step let's define IEEE754+, IEEE754-, IEEE754/ as follows: IEEE754+ (X,Y) = IEEE754-round (X + Y), etc. Now we see this: i) IEEE754 numbers *are* real numbers (we defined them that way). ii) the IEEE754+, IEEE754- and IEEE754/ operators "exhibit" the behaviour you described above. >You could answer that the different behaviour of Rebol number is only an >implementation detail, > > >but if this is true, it is also true that >decimal! are the same of integer! (the difference is only an >implementation detail) > There is exactly the same situation in mathematics too - cf. "construction" of the natural numbers in the ZF set theory, the "construction" of integers, the "construction" of rationals and the "construction" of reals. The "original" integers "created" this way aren't set-theoretically identical with "rational integers" or with "real integers". > and that Java number, Visual Basic number, and C >number are the same (the difference are only implementation details), so >the is no real difference between this languages and Rebol about number. > > Actually, there is a lower difference between a double precision C number and a Rebol decimal! number on a PC than between two Rebol representations of 1.0 on computers with different endianness, but it doesn't matter when we are describing the sameness of Rebol numbers as I "dared" to point out. >Well if you think as this, you should also agree on these thesis: > >Two strings in Rebol can be the same or cannot be the same. > >x: "house" >same: reduce [x x] >not-same: reduce [copy x copy x] > >But in my head the word "house" is only one, so this behaviour is >implementation-dependent. > > See http://www.fm.vslib.cz/~ladislav/rebol/identity.html for complete (and implementation independent) description of Rebol properties with respect to this subject. One point still remains to be made: There is not a complete counterpart of the above article written in an "implementation dependent" style and there never will be such a counterpart, because the implementation dependent terminology is intrinsically inconsistent. A notion: "distinct but identical" illustrates well the trouble one gets into when using it. -L -- To unsubscribe from the list, just send an email to lists at rebol.com with unsubscribe as the subject.
