[Another recent discussion on <span class="undefined"><font color="#000000">e-TC39 -at- <a href="http://ecma-international.org">ecma-international.org</a>. This one started as an administrative discussion. I have removed the administrative bits and left those of potential general interest. Since the thread is here all gathered together, I have also removed the parts where one message quotes a previous. I don&#39;t believe any meaning has been lost.]</font></span><br>
<br><div class="gmail_quote"><span style="font-size: large; font-weight: bold;">Forwarded conversation</span><br>Subject: <b class="gmail_sendername">ES3.1 WG Phone Conference</b><br>------------------------<br><br><span class="undefined"></span><span class="undefined"><font color="#000000">From: <b class="undefined">Mike Cowlishaw</b> <br>
Date: Feb 19, 2008 11:25 AM<br></font></span><br><font face="sans-serif" size="2">[...]</font><font face="sans-serif" size="2"> perhaps you can include in that discussion a rough outline for the decimal
support?</font>
<br>
<br><font face="sans-serif" size="2">Mike</font>
<br><br>----------<br><span class="undefined"><font color="#000000">From: <b class="undefined">Mark S. Miller</b> <br>Date: Feb 19, 2008 2:26 PM<br></font><br><br></span>Hi Mike,<br><br>I am new to the EcmaScript standards group so my apologies if I&#39;m<br>
confused about some distinctions. But as I understand it from looking<br>at ES3.1 documents and talking to others interested in ES3.1 (all of<br>whom are included in the addressee list), decimal is not part of<br>ES3.1. Frankly, if it were, I would argue that it should be removed.<br>
<font color="#888888"><br>-----<br></font><span class="undefined"><font color="#000000">From: <b class="undefined">Mike Cowlishaw</b> <br>Date: Feb 20, 2008 12:28 AM<br></font><br><br></span>Hi Mark, thanks for the note.<br>
<br>It does seem to be missing from the documentation. &nbsp;However, I was under<br>the impression that this was discussed by the ES3.1 informal group last<br>year and they intended to include it.<br>Perhaps you could explain why? &nbsp;It is especially necessary in languages<br>
designed for human interaction. &nbsp;See the FAQ at:<br><a href="http://www2.hursley.ibm.com/decimal/" target="_blank">http://www2.hursley.ibm.com/decimal/</a> for some of the reasons.<br><br>It sounds as though, at some point in the future, I should attend a<br>
meeting of the group and go through the background of this, and also the<br>state of decimal support in other standards and languages (IEEE 754r, ISO<br>C, C#, Python, etc.).<br><div><div></div></div><br>----------<br><span class="undefined"><font color="#000000">From: <b class="undefined">Douglas Crockford</b> <br>
Date: Feb 20, 2008 8:28 AM<br></font><br><br></span>I have no memory of any intention to include the decimal format in ES3.1.<br><br>----------<br><span class="undefined"><font color="#000000">From: <b class="undefined">Mike Cowlishaw</b> <br>
Date: Feb 20, 2008 8:51 AM<br></font><br></span>Hi Doug,<br><div><div></div></div>I&#39;m somewhat confused, then -- the notes I have (from at least two<br>sources) of the ES 3.1 breakout meeting last April (written by Pratap, I<br>
think) with &quot;Douglas Crockford, Allen Wirfs-Brock, Adam Peller, Pratap<br>Lakshman participating&quot; has an extensive discussion on how to include<br>decimal, in the list of &quot;the following general points of consensus among<br>
the participants&quot;.<br><br>I have no memory of the discussion, because I was not there, but I<br>certainly read it as an intent to include decimal -- or I would have<br>raised the topic earlier. &nbsp;[And it would be odd, indeed, for a scripting<br>
language to not have support for the primitive types in C and C#,<br>especially when the type is specifically designed for human-oriented and<br>scripting applications :-).]<br><font color="#888888"><br>Mike<br></font><div>
<div></div></div>----------<br><span class="undefined"><font color="#000000">From: <b class="undefined">Mark S. Miller</b> <br>Date: Feb 20, 2008 8:52 AM</font><br><br></span>C#, Python, All Lisps, Smalltalk, Java, and almost every other dynamic<br>
symbolic language that people use have unlimited precision integers.<br>If I decided to agitate to add a numeric type to ES3.1, that would be<br>my first choice. Btw, Java&#39;s BigDecimal, if I understand it, is<br>unlimited precision, and so includes all the integers as well as all<br>
the numbers represented by your proposal. If you did manage to<br>convince me of the need for decimal floating point, that might be my<br>second choice, but I doubt it.<br><br>However, I have held back from even advocating my first choice because<br>
the whole reason for the existence of ES3.1 is to hold the fort<br>against featuritis. The ES3.1 WG has adopted a particular design rule<br>to help enforce some design discipline: no syntactic changes. As some<br>members of this working group knows, I have been a fan of adding<br>
&quot;const&quot; to ES3.1, since it is a big help to readability and<br>reliability, and is already recognized in many widely deployed old<br>JavaScript systems. I hereby withdraw that suggestion, in order to<br>avoid setting a bad precedent.<br>
<br>Given only the current syntax and compatibility needs, &quot;3&quot; is<br>necessarily a double precision floating point literal. Since the<br>language has already committed to a path making it impossible to write<br>
an integer literal simply, I think it is best to leave<br>not-quite-well-enough alone and not introduce integers to the<br>language. I am willing to sacrifice integers for the sake of<br>simplicity+compatibility. Please consider sacrificing decimal for the<br>
same reason.<br><font color="#888888"><br></font>----------<br><span class="undefined"><font color="#000000">From: <b class="undefined">Allen Wirfs-Brock</b> <br>Date: Feb 20, 2008 8:59 AM<br></font><br><br></span>Decimal arithmetic has always been &quot;on the table&quot; as something that could be considered for ES3.1. &nbsp;We actually talked about it a bit with Adam Peller at the April 2007 meeting in Newton.<br>
<br>We&#39;ve never had what I would consider to be a &quot;final&quot; list of features for ES3.1 inclusions. &nbsp;We&#39;ve only had various strawman lists, primarily put together my Douglas, Pratap, and myself. &nbsp;I&#39;ve always assumed that it was up to IBM/Mike&#39;s to advocate for inclusion of decimal arithmetic and to show that it could be supported in a manner that is practical and consistent with the overall ES3.1 design goals.<br>
<br><div><div></div></div>----------<br><span class="undefined"><font color="#000000">From: <b class="undefined">Mark S. Miller</b> <br>Date: Feb 20, 2008 9:06 AM<br></font><br><br></span>I should explain my mysterious &quot;I doubt it&quot;. I have always admired<br>
exact rationals (unlimited precision integers for both numerator and<br>denominator). However, in years of programming in Smalltalk where<br>integers, floats, and rationals were all available, I only ever used<br>integers and floats. My own language, E, has integers and floats, and<br>
I&#39;ve never found myself needing anything else. Still, if I were going<br>to add something instead of integers, I might choose exact rationals,<br>especially since they do include all the integers as representable<br>values.<br>
<br>But to be clear, my position is: don&#39;t add any new numeric types to ES3.1.<br><font color="#888888"><br></font>----------<br><span class="undefined"><font color="#000000">From: <b class="undefined">Mike Cowlishaw</b> <br>
Date: Feb 20, 2008 9:24 AM<br></font><br><br></span>Mark, many thanks for the detailed reply.<br><br>BigInteger and BigDecimal arbitrary-precision types are in a somewhat<br>different category because they are not primitive types (in the Java<br>
sense) and have not been implemented in hardware for 40 years at least.<br>The decimal128 type -- probably the right match for ECMAScript as key<br>users such as SAP have standardized on that -- is a primitive type in the<br>
same sense as double and float; it is in hardware and is being included in<br>IEEE 754 (currently close to final ballot) and other standards, and is<br>already in C compilers such as GCC.<br>I quite agree about not adding integers; if in range, they can be<br>
represented exactly by the ECMAScript floating-point type and so are not<br>necessary. &nbsp;They also (in their typical implementation) have several<br>undesirable characteristics for an apllications language, such as quite<br>
overflow from a positive to a negative value.<br><br>But, again, decimals are in a different category: the decimal fraction<br>0.10 (ten cents, for example) cannot be represented exactly in ECMAScript<br>(except as a string), and cannot be used for arithmetic directly. &nbsp;Here,<br>
for example, is a &#39;classic&#39; excerpt from a web page in which ECMAScript<br>was used to calculate a car parking charge (at Manchester airport):<br><br> &nbsp;Car Park Arrival ................: 8/11/2001 at 09.00.00<br> &nbsp;Car Park Departure ..............: 18/11/2001 at 09.00.00<br>
 &nbsp;No of days ......................: 11<br> &nbsp;Daily Tariff ....................: 4.2 GBP<br> &nbsp;Total Price .....................: 46.19 GBP<br><br>There are two problems here: first, the inability to preserve a trailing<br>
zero (on the fourth line), and second, the rounding error after what<br>should have been an exact multiplication (on the fifth). &nbsp;These problems<br>occur over and over again in real applications, and will continue to<br>plague us until the language supports decimal arithmetic. &nbsp;TC39 would have<br>
added it in ES 3.0, I am sure, if only the standards had been more<br>advanced then. &nbsp;It&#39;s not a &#39;feature&#39; -- it&#39;s a necessity.<br><font color="#888888"><br>Mike<br></font><div><div></div></div>----------<br>
<span class="undefined"><font color="#000000">From: <b class="undefined">Mark S. Miller</b> <br>Date: Feb 20, 2008 9:58 AM<br></font><br><br></span>Yes, I am quite aware that IEEE double precision floating point<br>numbers can exactly represent 2**52 or so integers. And yes, the<br>
numeric type known as &quot;int&quot; in C..Java quietly wraps on overflow, and<br>so are not integers. I agree that limited precision floating point or<br>decimal thus approximates integers better than C&#39;s &quot;int&quot; does.<br>
Precision loss is less pathological than wrapping.<br><br>By &quot;integers&quot; I mean specifically unlimited precision integers. Try<br>explaining anything else to Peano or Pythagoras. With integers,<br>several important crypto algorithms (e.g., Diffee-Hellman) can be<br>
coded simply. But I&#39;m willing to give up integers because I have no<br>idea how to add them to ES3.1 well under the &quot;no new syntax&quot; design<br>constraint. Do you have a syntax-free proposal for decimal?<br><br>
Regarding your car park example, or any monetary example, the answer<br>is simple even if unpleasant: any currency has a minimum unit. In the<br>US it&#39;s the penny. Just calculate in terms of this minimal unit using<br>
integers. Then do format conversion on entry and rendering.<br><br>Hmm. I just noticed that this thread isn&#39;t on es4-discuss. Shouldn&#39;t it be?<br><font color="#888888"><br></font></div>