I thought ".to_s.to_f" should be an identity operation on any floating
point number, apart from a potential truncation error.
That would be a good property. The reason behind String#to_f not
supporting NaN and Inf is that I couldn't give up non IEEE754 floating
point architecture such as VAX at the time I implemented.
But we are no longer see any non-IEEE754 architecture around, and
current implementation of Ruby would require IEEE754 anyway, so it
might be a good chance to introduce roundtrip nature.
matz.
···
In message "Re: "NaN".to_f revisited" on Wed, 11 Aug 2010 09:30:14 +0900, Ryo <furue@hawaii.edu> writes:
Normally if the string starts with non-numeric characters, converting
to numbers yields a zero result. This is to remain consistent with
atof and strtod from the standard c library. On my machine, the man
page for strtod contains this paragraph:
Alternatively, if the portion of the string following the optional plus
or minus sign begins with ``INFINITY'' or ``NAN'', ignoring case, it is
interpreted as an infinity or a quiet NaN, respectively.
In practice, strtod seems to actually recognize INF rather than the
fully-spelled-out INFINITY as the trigger for returning infinity. So,
your last 2 examples would return NaN and Inf if passed to strtod.