Bug #1566
closedsprintf with %e or %E Format Specifer Incorrectly Capitalises Inf and NaN
Description
=begin
sprintf/String#% use the %e and %E format specifier to determine the case of results which are NaN or Inf. For example:
$ ruby1.8 -ve 'p sprintf("%e", 0.0/0)'
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
"nan"
$ ruby1.8 -ve 'p sprintf("%E", 0.0/0)'
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
"NAN"
I suspect this is wrong for the following reasons:
- 1.9 doesn't capitalise these values, i.e. it always returns Inf or NaN.
- The rdoc description for the %E field is "Equivalent to `e', but uses an uppercase E to indicate the exponent." Neither Inf or NaN are exponents.
- The description for the %e field doesn't make any mention of it's output case.
- JRuby, and I believe Rubinius, behave as 1.9 does.
- NaN and Inf have specific mathematical meanings; it doesn't make sense to subject them to English capitalisation rules.
=end
Files
Updated by m (m .) over 15 years ago
=begin
The attached patch fixes this by removing the Windows-only ifdef that currently guards the portion of the code doing the formatting of the resulting string.
I'm not sure of why it was guarded in the first place (the code works fine in OS X) so please test this on Linux/other platforms and apply if you consider this change is worth making.
=end
Updated by nobu (Nobuyoshi Nakada) over 15 years ago
- Status changed from Open to Assigned
- Assignee set to knu (Akinori MUSHA)
- Target version changed from Ruby 1.8.6 to Ruby 1.8.8
=begin
=end
Updated by naruse (Yui NARUSE) over 11 years ago
- Description updated (diff)
- Status changed from Assigned to Rejected
1.8's sprintf is a simple wrapper of sprintf(3).
sprintf(3)'s e/E behaves as you said.
See also http://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html