[#45426] [ruby-trunk - Feature #6546][Open] Net::HTTP to check for HTTP_PROXY environment setting. — "dekz (Jacob Evans)" <dekzter@...>

14 messages 2012/06/04

[#45431] [ruby-trunk - Bug #6548][Open] Rake doesn't ignore arguments after -- — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>

12 messages 2012/06/05

[#45474] [ANN] Request for "slide-show" of your feature proposal — Yusuke Endoh <mame@...>

(Japanese later; 日本語が後にあります)

18 messages 2012/06/07

[#45563] [ruby-trunk - Bug #6573][Open] Webrick test failures — "bkabrda (Bohuslav Kabrda)" <bkabrda@...>

19 messages 2012/06/11

[#45567] [ruby-trunk - Bug #6575][Open] Thread#kill sets rb_errinfo() to Fixnum 8 after rb_protect(function, data, &error_tag) — ibc (Iñaki Baz Castillo) <ibc@...>

9 messages 2012/06/11

[#45647] [ruby-trunk - Bug #6592][Open] test_call_double(DL::TestDL) fails on ARM HardFP — "vo.x (Vit Ondruch)" <v.ondruch@...>

15 messages 2012/06/14

[#45657] [ruby-trunk - Feature #6594][Open] Integrated Functor — "trans (Thomas Sawyer)" <transfire@...>

20 messages 2012/06/15

[#45664] [ruby-trunk - Bug #6596][Open] New method for Arrays : Array#index — "robin850 (Robin Dupret)" <robin.dupret@...>

20 messages 2012/06/15

[#45694] [ruby-trunk - Feature #6602][Open] Tail call optimization: enable by default? — "ko1 (Koichi Sasada)" <redmine@...>

12 messages 2012/06/18

[#45715] [ruby-trunk - Feature #6609][Open] Toplevel as self extended module — "trans (Thomas Sawyer)" <transfire@...>

17 messages 2012/06/19

[#45732] [ruby-trunk - Bug #6614][Open] GC doesn't collect objects bound to (collectable) proc — "rogerdpack (Roger Pack)" <rogerpack2005@...>

9 messages 2012/06/20

[#45733] [ruby-trunk - Feature #6615][Open] Release GVL in zlib when calling inflate() or deflate() — "drbrain (Eric Hodel)" <[email protected]>

12 messages 2012/06/21

[#45735] [ruby-trunk - Bug #6616][Open] MinGW: cannot build extensions or run tests due changes in exec_arg? — "luislavena (Luis Lavena)" <luislavena@...>

9 messages 2012/06/21

[#45798] [ruby-trunk - Bug #6634][Open] Deadlock with join and ConditionVariable — "meh. (meh. I don't care)" <meh@...>

20 messages 2012/06/23

[#45805] [ruby-trunk - Feature #6636][Open] Enumerable#size — "marcandre (Marc-Andre Lafortune)" <ruby-core@...>

15 messages 2012/06/23

[#45864] [ruby-trunk - Bug #6647][Open] Exceptions raised in threads should be logged — "headius (Charles Nutter)" <headius@...>

71 messages 2012/06/25

[#45902] [ruby-trunk - Bug #6653][Open] 1.9.2/1.9.3 exhibit SEGV with many threads+tcp connections — "erikh (Erik Hollensbe)" <erik@...>

11 messages 2012/06/26

[#45960] [ruby-trunk - Feature #6669][Open] A method like Hash#map but returns hash — "yhara (Yutaka HARA)" <redmine@...>

18 messages 2012/06/29

[#45963] [ruby-trunk - Feature #6670][Open] str.chars.last should be possible — "yhara (Yutaka HARA)" <redmine@...>

36 messages 2012/06/29

[#46021] [ruby-trunk - Feature #6679][Open] Default Ruby source file encoding to utf-8 — "claytrump (Clay Trump)" <clay.trump@...>

21 messages 2012/06/30

[ruby-core:45637] [Ruby 1.8 - Backport #3273][Closed] Float string conversion

From: "marcandre (Marc-Andre Lafortune)" <ruby-core@...>
Date: 2012-06-14 02:30:46 UTC
List: ruby-core #45637
Issue #3273 has been updated by marcandre (Marc-Andre Lafortune).

Description updated
Status changed from Open to Closed


----------------------------------------
Backport #3273: Float string conversion
https://bugs.ruby-lang.org/issues/3273#change-27234

Author: marcandre (Marc-Andre Lafortune)
Status: Closed
Priority: Normal
Assignee: 
Category: core
Target version: Ruby 1.8.8


=begin
 For any float f, the two following conditions should hold:
 (1) f.to_s.to_f == f        (round trips)
 (2) f.to_s.chop.to_f != f   (minimal)
 
 The second condition is a simplification; if the string representation is in scientific notation, than the character to remove would be the one just before the "e". Also, if the string representation ends with ".0", then it is minimal.
 
 Currently, the first condition fails in Ruby 1.8, and the second fails in Ruby 1.9
 
   $ ruby18dev -ve 'f = 0.21611564636388508; puts f.to_s.to_f == f'
   ruby 1.8.8dev (2010-05-11) [i386-darwin10.3.0]
   false
 
   $ rubydev -ve 'f = 0.56; puts f.to_s.chop.to_f != f'
   ruby 1.9.3dev (2010-05-11 trunk 27730) [x86_64-darwin10.3.0]
   false
 
 Note that this implies that Ruby 1.8 and 1.9 do not output the same string representation for either of these two floats.
 
 The conversion algorithm currently checks two precisions. In Ruby 1.9, it tries 16 digits and if that's not enough it then uses 17. In 1.8, it's the same but with 15 and 16.
 
 The fact is that 17 can be necessary (e.g. 0.21611564636388508 is not equal to either 0.2161156463638851 or 0.2161156463638850) and 16 can be too much (e.g. 0.5600000000000001 == 0.56), so three precisions must be checked.
 
 The following patch fixes this issue for trunk (although it can probably be made nicer and/or faster).
 
 Let me know if there are any objections to fixing both the 1.9 and 1.8 lines.
 
 
 diff --git a/numeric.c b/numeric.c
 index f2c8c13..442b069 100644
 --- a/numeric.c
 +++ b/numeric.c
 @@ -569,7 +569,8 @@ flo_to_s(VALUE flt)
      else if (isnan(value))
         return rb_usascii_str_new2("NaN");
  
 -# define FLOFMT(buf, size, fmt, prec, val) snprintf(buf, size, fmt, prec, val), \
 +# define FLOFMT(buf, size, fmt, prec, val) snprintf(buf, size, fmt, prec-1, val), \
 +    (void)((atof(buf) == val) || snprintf(buf, size, fmt, (prec), val)), \
      (void)((atof(buf) == val) || snprintf(buf, size, fmt, (prec)+1, val))
  
      FLOFMT(buf, sizeof(buf), "%#.*g", float_dig, value); /* ensure to print decimal point */
=end



-- 
http://bugs.ruby-lang.org/

In This Thread

Prev Next