Project

General

Profile

Bug #1328

"p eval('0' + '+0.1'*n)" の挙動

Added by mrkn (Kenta Murata) about 10 years ago. Updated about 8 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
ruby -v:
ruby 1.9.2dev (2009-03-29) [i386-darwin9.6.0]
Backport:

Description

=begin
"p eval('0'+'+0.1'*n)" を評価すると、n がある値 N を超えたときに
スタックが溢れますが、バージョン 1.9.2 の N が バージョン 1.9.1 より
小さくなっています。

$ ~/ruby-1.9.1-r22762/bin/ruby -ve "p eval('0'+'+0.1'*13093)"
ruby 1.9.1p0 (2009-03-04 revision 22762) [i386-darwin9.6.0]
1309.2999999999
$ ~/ruby-1.9.1-r22762/bin/ruby -ve "p eval('0'+'+0.1'*13094)"
ruby 1.9.1p0 (2009-03-04 revision 22762) [i386-darwin9.6.0]
-e:1:in eval': stack level too deep (SystemStackError)
from -e:1:in
'

$ ~/ruby-1.9.2-r23093/bin/ruby -ve "p eval('0'+'+0.1'*7481)"
ruby 1.9.2dev (2009-03-29) [i386-darwin9.6.0]
748.10000000010155
$ ~/ruby-1.9.2-r23093/bin/ruby -ve "p eval('0'+'+0.1'*7482)"
ruby 1.9.2dev (2009-03-29) [i386-darwin9.6.0]
-e:1:in eval': stack level too deep (SystemStackError)
from -e:1:in
'
=end

Associated revisions

Revision 59991b6a
Added by hsbt (Hiroshi SHIBATA) over 3 years ago

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51801 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 51801
Added by hsbt (Hiroshi SHIBATA) over 3 years ago

Revision 51801
Added by hsbt (Hiroshi SHIBATA) over 3 years ago

Revision 51801
Added by hsbt (Hiroshi SHIBATA) over 3 years ago

Revision 51801
Added by hsbt (Hiroshi SHIBATA) over 3 years ago

Revision 51801
Added by hsbt (Hiroshi SHIBATA) over 3 years ago

History

#1

Updated by nobu (Nobuyoshi Nakada) about 10 years ago

=begin
なかだです。

At Mon, 30 Mar 2009 05:50:40 +0900,
Kenta Murata wrote in [ruby-dev:38207]:

"p eval('0'+'+0.1'*n)" を評価すると、n がある値 N を超えたときに
スタックが溢れますが、バージョン 1.9.2 の N が バージョン 1.9.1 より
小さくなっています。

再現できませんでした。

$ ./ruby -ve "p eval('0'+'+0.1'*6714)"
ruby 1.9.2dev (2009-03-30 trunk 23097) [i386-darwin9.0]
671.40000000008411

$ ./ruby -ve "p eval('0'+'+0.1'*6715)"
ruby 1.9.1p0 (2009-03-04 revision 22762) [i386-darwin9.6.0]
-e:1:in eval': stack level too deep (SystemStackError)
from -e:1:in
'

$ ~/ruby-1.9.1-r22762/bin/ruby -ve "p eval('0'+'+0.1'*13093)"
ruby 1.9.1p0 (2009-03-04 revision 22762) [i386-darwin9.6.0]
1309.2999999999
$ ~/ruby-1.9.1-r22762/bin/ruby -ve "p eval('0'+'+0.1'*13094)"
ruby 1.9.1p0 (2009-03-04 revision 22762) [i386-darwin9.6.0]
-e:1:in eval': stack level too deep (SystemStackError)
from -e:1:in
'

$ ~/ruby-1.9.2-r23093/bin/ruby -ve "p eval('0'+'+0.1'*7481)"
ruby 1.9.2dev (2009-03-29) [i386-darwin9.6.0]
748.10000000010155
$ ~/ruby-1.9.2-r23093/bin/ruby -ve "p eval('0'+'+0.1'*7482)"
ruby 1.9.2dev (2009-03-29) [i386-darwin9.6.0]
-e:1:in eval': stack level too deep (SystemStackError)
from -e:1:in
'

それぞれのコンパイルオプションは同じでしょうか。

--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦

=end

#2

Updated by mrkn (Kenta Murata) about 10 years ago

=begin
むらたです。

On 2009/03/30, at 12:47, Nobuyoshi Nakada wrote:

At Mon, 30 Mar 2009 05:50:40 +0900,
Kenta Murata wrote in [ruby-dev:38207]:

"p eval('0'+'+0.1'*n)" を評価すると、n がある値

N を超えたときに
スタックが溢れますが、バージョン 1.9.2 の N

が バージョン 1.9.1 より
小さくなっています。

再現できませんでした。

$ ./ruby -ve "p eval('0'+'+0.1'*6714)"
ruby 1.9.2dev (2009-03-30 trunk 23097) [i386-darwin9.0]
671.40000000008411

$ ./ruby -ve "p eval('0'+'+0.1'*6715)"
ruby 1.9.1p0 (2009-03-04 revision 22762) [i386-darwin9.6.0]
-e:1:in eval': stack level too deep (SystemStackError)
from -e:1:in
'

$ ~/ruby-1.9.1-r22762/bin/ruby -ve "p eval('0'+'+0.1'*13093)"
ruby 1.9.1p0 (2009-03-04 revision 22762) [i386-darwin9.6.0]
1309.2999999999
$ ~/ruby-1.9.1-r22762/bin/ruby -ve "p eval('0'+'+0.1'*13094)"
ruby 1.9.1p0 (2009-03-04 revision 22762) [i386-darwin9.6.0]
-e:1:in eval': stack level too deep (SystemStackError)
from -e:1:in
'

$ ~/ruby-1.9.2-r23093/bin/ruby -ve "p eval('0'+'+0.1'*7481)"
ruby 1.9.2dev (2009-03-29) [i386-darwin9.6.0]
748.10000000010155
$ ~/ruby-1.9.2-r23093/bin/ruby -ve "p eval('0'+'+0.1'*7482)"
ruby 1.9.2dev (2009-03-29) [i386-darwin9.6.0]
-e:1:in eval': stack level too deep (SystemStackError)
from -e:1:in
'

それぞれのコンパイルオプションは同じでしょうか。

configure 時に CFLAGS 等は特に指定していませんので、
コンパイルオプションは各バージョンのデフォルトが指定されています。

$ ~/ruby-1.9.2-r23093/bin/ruby -rrbconfig -ve 'p

Config::CONFIG["CFLAGS"]'
ruby 1.9.2dev (2009-03-29) [i386-darwin9.6.0]
" -O3 -g -Wall -Wno-unused-parameter -Wno-parentheses -Wno-missing-
field-initializers -Wshorten-64-to-32 -Wpointer-arith -Wwrite-strings -
fno-common -pipe"

$ ~/ruby-1.9.1-r22762/bin/ruby -rrbconfig -ve 'p

Config::CONFIG["CFLAGS"]'
ruby 1.9.1p0 (2009-03-04 revision 22762) [i386-darwin9.6.0]
" -O2 -g -Wall -Wno-parentheses -fno-common -pipe -fno-common"

影響しそうな違いは -O2 から -O3 に変わったところ
くらいでしょうか。

--
Kenta Murata
OpenPGP FP = FA26 35D7 4F98 3498 0810 E0D5 F213 966F E9EB 0BCC

=end

#3

Updated by yugui (Yuki Sonoda) almost 10 years ago

  • Status changed from Open to Closed

=begin

=end

Also available in: Atom PDF