Project

General

Profile

Actions

Bug #1566

closed

sprintf with %e or %E Format Specifer Incorrectly Capitalises Inf and NaN

Added by runpaint (Run Paint Run Run) almost 15 years ago. Updated about 11 years ago.

Status:
Rejected
Target version:
ruby -v:
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
[ruby-core:23697]

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

fix-nan-and-inf-in-sprintf.diff (507 Bytes) fix-nan-and-inf-in-sprintf.diff Fix NaN and Inf capitalization in sprintf m (m .), 09/08/2009 07:53 AM
Actions #1

Updated by m (m .) over 14 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

Actions #2

Updated by nobu (Nobuyoshi Nakada) over 14 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) about 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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0