From: "NARUSE, Yui" Date: 2013-04-22T14:34:06+09:00 Subject: [ruby-core:54499] Re: [Backport 200 - Backport #8299][Open] Minor error in float parsing --089e01184abeda096304daec4f58 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit I wrongly sent previous mail. 2013年4月22日月曜日 David MacMahon davidm@astro.berkeley.edu: > > On Apr 21, 2013, at 7:18 PM, naruse (Yui NARUSE) wrote: > > > marcandre (Marc-Andre Lafortune) wrote: > >> For any float f, the two following conditions should hold: > >> (1) f.to_s.to_f == f (round trips) > > > > Yeah, unless you transfer the result of to_s to another environment. > > Are you saying that round tripping is only valid on "the native > architecture's double-precision floating point representation" (quote from > Float's RDoc)? That would make sense to me. Yes, only portable on the same architecture. > > x87 FPU stores and calculates floating numbers in 80bit on registers, > even if it is stored in 64bit on memory. > > Does Float on x87 systems use 80-bits to store its value? IOW, is "the > native architecture's double-precision floating point representation" 80 > bits on x87?Asking (almost) the same thing a third way, what is > "sizeof(double)" on a system with an x87 FPU? > x87 stores value 80bit on registers and arithmetics, 64bit on memory. So sizeof(double)=8. > > Therefore x87's result may differ from modern FPU's result. > > I agree that the results of floating point operations on x87 may differ > from the same operations on modern FPU's given the same input operands due > to 80-bit intermediate values on x87, but does this affect the parsing of > Float literals? Parsing itself is of course doesn't affect. Decimal-binary conversion affect it > Do Float constants like EPSILON, MIN, and MAX differ between x87 systems > and modern FPUs? I'll show those constants on my 32bit Linux. > Does "x87" == "non-IEEE-754" and "modern FPU" == "IEEE-754"? > I think what you think is correct. Why I didn't write so is because as far as I understand, x87 complies IEEE 754 standard; the standard allows to store and calculate float64 in 80bit. -- NARUSE, Yui --089e01184abeda096304daec4f58 Content-Type: text/html; charset=ISO-2022-JP Content-Transfer-Encoding: base64 SSB3cm9uZ2x5IHNlbnQgcHJldmlvdXMgbWFpbC48YnI+PGJyPjIwMTMbJEJHLxsoQjQbJEI3bhso QjIyGyRCRnw3bk1LRnwbKEIgRGF2aWQgTWFjTWFob24gPGEgaHJlZj0ibWFpbHRvOmRhdmlkbUBh c3Ryby5iZXJrZWxleS5lZHUiPmRhdmlkbUBhc3Ryby5iZXJrZWxleS5lZHU8L2E+Ojxicj48Ymxv Y2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3Jk ZXItbGVmdDoxcHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij4NCjxicj4NCk9uIEFwciAy MSwgMjAxMywgYXQgNzoxOCBQTSwgbmFydXNlIChZdWkgTkFSVVNFKSB3cm90ZTo8YnI+DQo8YnI+ DQomZ3Q7IG1hcmNhbmRyZSAoTWFyYy1BbmRyZSBMYWZvcnR1bmUpIHdyb3RlOjxicj4NCiZndDsm Z3Q7IEZvciBhbnkgZmxvYXQgZiwgdGhlIHR3byBmb2xsb3dpbmcgY29uZGl0aW9ucyBzaG91bGQg aG9sZDo8YnI+DQomZ3Q7Jmd0OyAoMSkgZi50b19zLnRvX2YgPT0gZiAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsocm91bmQgdHJpcHMpPGJyPg0KJmd0Ozxicj4NCiZndDsgWWVhaCwgdW5sZXNz IHlvdSB0cmFuc2ZlciB0aGUgcmVzdWx0IG9mIHRvX3MgdG8gYW5vdGhlciBlbnZpcm9ubWVudC48 YnI+DQo8YnI+DQpBcmUgeW91IHNheWluZyB0aGF0IHJvdW5kIHRyaXBwaW5nIGlzIG9ubHkgdmFs aWQgb24gJnF1b3Q7dGhlIG5hdGl2ZSBhcmNoaXRlY3R1cmUmIzM5O3MgZG91YmxlLXByZWNpc2lv biBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiZxdW90OyAocXVvdGUgZnJvbSBGbG9hdCYj Mzk7cyBSRG9jKT8gJm5ic3A7VGhhdCB3b3VsZCBtYWtlIHNlbnNlIHRvIG1lLjwvYmxvY2txdW90 ZT48ZGl2Pjxicj4NCjwvZGl2PjxkaXY+WWVzLCBvbmx5IHBvcnRhYmxlIG9uIHRoZSBzYW1lIGFy Y2hpdGVjdHVyZS48L2Rpdj48ZGl2PiZuYnNwOzwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFp bF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNv bGlkO3BhZGRpbmctbGVmdDoxZXgiPg0KJmd0OyB4ODcgRlBVIHN0b3JlcyBhbmQgY2FsY3VsYXRl cyBmbG9hdGluZyBudW1iZXJzIGluIDgwYml0IG9uIHJlZ2lzdGVycywgZXZlbiBpZiBpdCBpcyBz dG9yZWQgaW4gNjRiaXQgb24gbWVtb3J5Ljxicj4NCjxicj4NCkRvZXMgRmxvYXQgb24geDg3IHN5 c3RlbXMgdXNlIDgwLWJpdHMgdG8gc3RvcmUgaXRzIHZhbHVlPyAmbmJzcDtJT1csIGlzICZxdW90 O3RoZSBuYXRpdmUgYXJjaGl0ZWN0dXJlJiMzOTtzIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcg cG9pbnQgcmVwcmVzZW50YXRpb24mcXVvdDsgODAgYml0cyBvbiB4ODc/QXNraW5nIChhbG1vc3Qp IHRoZSBzYW1lIHRoaW5nIGEgdGhpcmQgd2F5LCB3aGF0IGlzICZxdW90O3NpemVvZihkb3VibGUp JnF1b3Q7IG9uIGEgc3lzdGVtIHdpdGggYW4geDg3IEZQVT88YnI+DQo8L2Jsb2NrcXVvdGU+PGRp dj4mbmJzcDs8L2Rpdj48ZGl2Png4NyBzdG9yZXMgdmFsdWUgODBiaXQgb24gcmVnaXN0ZXJzIGFu ZCBhcml0aG1ldGljcywgNjRiaXQgb24gbWVtb3J5LjwvZGl2PjxkaXY+U28gc2l6ZW9mKGRvdWJs ZSk9OC48L2Rpdj48ZGl2PiZuYnNwOzwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90 ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3Bh ZGRpbmctbGVmdDoxZXgiPg0KDQomZ3Q7IFRoZXJlZm9yZSB4ODcmIzM5O3MgcmVzdWx0IG1heSBk aWZmZXIgZnJvbSBtb2Rlcm4gRlBVJiMzOTtzIHJlc3VsdC48YnI+DQo8YnI+DQpJIGFncmVlIHRo YXQgdGhlIHJlc3VsdHMgb2YgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyBvbiB4ODcgbWF5IGRp ZmZlciBmcm9tIHRoZSBzYW1lIG9wZXJhdGlvbnMgb24gbW9kZXJuIEZQVSYjMzk7cyBnaXZlbiB0 aGUgc2FtZSBpbnB1dCBvcGVyYW5kcyBkdWUgdG8gODAtYml0IGludGVybWVkaWF0ZSB2YWx1ZXMg b24geDg3LCBidXQgZG9lcyB0aGlzIGFmZmVjdCB0aGUgcGFyc2luZyBvZiBGbG9hdCBsaXRlcmFs cz88L2Jsb2NrcXVvdGU+DQo8ZGl2Pjxicj48L2Rpdj5QYXJzaW5nIGl0c2VsZiBpcyBvZiBjb3Vy c2UgZG9lc24mIzM5O3QgYWZmZWN0LjxkaXY+RGVjaW1hbC1iaW5hcnkgY29udmVyc2lvbiBhZmZl Y3QgaXQ8L2Rpdj48ZGl2PjxkaXY+Jm5ic3A7PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWls X3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29s aWQ7cGFkZGluZy1sZWZ0OjFleCI+DQoNCkRvIEZsb2F0IGNvbnN0YW50cyBsaWtlIEVQU0lMT04s IE1JTiwgYW5kIE1BWCBkaWZmZXIgYmV0d2VlbiB4ODcgc3lzdGVtcyBhbmQgbW9kZXJuIEZQVXM/ PC9ibG9ja3F1b3RlPjxkaXY+PGJyPjwvZGl2PjxkaXY+SSYjMzk7bGwgc2hvdyB0aG9zZSBjb25z dGFudHMgb24gbXkgMzJiaXQgTGludXguPHNwYW4+PC9zcGFuPjwvZGl2PjxkaXY+Jm5ic3A7PC9k aXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44 ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+DQoNCkRvZXMg JnF1b3Q7eDg3JnF1b3Q7ID09ICZxdW90O25vbi1JRUVFLTc1NCZxdW90OyBhbmQgJnF1b3Q7bW9k ZXJuIEZQVSZxdW90OyA9PSAmcXVvdDtJRUVFLTc1NCZxdW90Oz88YnI+DQo8L2Jsb2NrcXVvdGU+ PGRpdj48YnI+PC9kaXY+PGRpdj5JIHRoaW5rIHdoYXQgeW91IHRoaW5rIGlzIGNvcnJlY3QuPC9k aXY+PGRpdj5XaHkgSSBkaWRuJiMzOTt0IHdyaXRlIHNvIGlzIGJlY2F1c2UgYXMgZmFyIGFzIEkg dW5kZXJzdGFuZCwgeDg3IGNvbXBsaWVzJm5ic3A7SUVFRSA3NTQgc3RhbmRhcmQ7IHRoZSBzdGFu ZGFyZCZuYnNwO2FsbG93cyB0byBzdG9yZSBhbmQgY2FsY3VsYXRlIGZsb2F0NjQgaW4gODBiaXQu PC9kaXY+DQo8L2Rpdj48YnI+PGJyPi0tIDxicj5OQVJVU0UsIFl1aSAmbmJzcDsmbHQ7PGEgaHJl Zj0ibWFpbHRvOm5hcnVzZUBhaXJlbWl4LmpwIiB0YXJnZXQ9Il9ibGFuayI+bmFydXNlQGFpcmVt aXguanA8L2E+Jmd0Ozxicj4NCg== --089e01184abeda096304daec4f58--