[#43378] trouble on "requrie 'tk'" — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
5 messages
2011/04/02
[#43382] Re: [ruby-cvs:38408] Ruby:r31228 (trunk): Fri Apr 1 18:53:06 2011 NAKAMURA, Hiroshi <[email protected]> — "Martin J. Dürst" <duerst@...>
RFC2965 とか 'Netscape spec' より、
4 messages
2011/04/04
[#43403] Re: [ruby-cvs:38408] Ruby:r31228 (trunk): Fri Apr 1 18:53:06 2011 NAKAMURA, Hiroshi <[email protected]>
— Hiroshi Nakamura <nakahiro@...>
2011/04/20
T24gTW9uLCBBcHIgNCwgMjAxMSBhdCAxMDozOCwgIk1hcnRpbiBKLiBEw7xyc3QiIDxkdWVyc3RA
[#43384] [Ruby 1.9 - Bug #4562][Open] [pull requested] ./config no-ssl2で作ったopensslとext/opensslが混ざらない — Shyouhei Urabe <redmine@...>
7 messages
2011/04/07
[#43392] StringIO#{readlines(0), each_line(0)}が無限ループする — Watson <watson1978@...>
メールのタイトル通りなのですが、
8 messages
2011/04/08
[#43393] Re: StringIO#{readlines(0), each_line(0)}が無限ループする
— "Shota Fukumori (sora_h)" <sorah@...>
2011/04/09
r31252 で修正しました。
[#43394] Re: StringIO#{readlines(0), each_line(0)}が無限ループする
— Nobuhiro IMAI <nov@...>
2011/04/09
いまいです。
[#43406] [Ruby 1.9 - Bug #4591][Open] (1.5...2).max #=> 1 (Range#max) — redmine@...
10 messages
2011/04/20
[#43407] Re: [Ruby 1.9 - Bug #4591][Open] (1.5...2).max #=> 1 (Range#max)
— KOSAKI Motohiro <kosaki.motohiro@...>
2011/04/20
>
[#43412] [Ruby 1.9 - Feature #4592][Open] Tempfileを直接保存したい — Takeyuki Fujioka <xibbar@...>
15 messages
2011/04/21
[#45477] [ruby-trunk - Feature #4592] Tempfileを直接保存したい
— "mame (Yusuke Endoh)" <mame@...>
2012/03/31
[#45487] [ruby-trunk - Feature #4592] Tempfileを直接保存したい
— "mame (Yusuke Endoh)" <mame@...>
2012/04/02
[#43426] [Ruby 1.9 - Feature #4602][Open] naming ruby dll (win32/64) — Akio Tajima <artonx@...>
11 messages
2011/04/23
[#43427] [Ruby 1.9 - Feature #4605][Open] Random#randとKernel#randでRangeを扱えるように — Yuya Yaguchi <yayugu@...>
7 messages
2011/04/24
[#43437] Re: [ruby-cvs:38520] Ruby:r31340 (trunk): * random.c (random_s_rand, Init_Random): Random.rand should behave as — Urabe Shyouhei <shyouhei@...>
卜部です
6 messages
2011/04/25
[#43453] ThreadGroup の強化案 — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
14 messages
2011/04/28
[#43901] ThreadGroup#make_local_space! (Re: ThreadGroup の強化案)
— Hidetoshi NAGAI <nagai@...>
2011/06/25
永井@知能.九工大です.少々長いメールで失礼します.
[#43920] Re: ThreadGroup#make_local_space! (Re: ThreadGroup の強化案)
— Urabe Shyouhei <shyouhei@...>
2011/06/26
ひっじょうに根本的な質問をするのですけれども、ThreadGroupって何に使うん
[#43978] Re: ThreadGroup#make_local_space!
— Hidetoshi NAGAI <nagai@...>
2011/06/28
永井@知能.九工大です.
[#43979] Re: ThreadGroup#make_local_space!
— KOSAKI Motohiro <kosaki.motohiro@...>
2011/06/28
(2011/06/28 15:15), Hidetoshi NAGAI wrote:
[#43456] Readline.completion_append_character — Nobuhiro IMAI <nov@...>
いまいです。
6 messages
2011/04/29
[#43458] Re: Readline.completion_append_character
— Takao Kouji <[email protected]>
2011/04/30
=1B$B9bHx$G$9!#=1B(B
[ruby-dev:43408] Re: [Ruby 1.9 - Bug #4591][Open] (1.5...2).max #=> 1 (Range#max)
From:
Kenta Murata <muraken@...>
Date:
2011-04-21 02:37:36 UTC
List:
ruby-dev #43408
むらたです。
test_range.rb の test_max を見てみました。
assert_equal(2, (1..2).max)
assert_equal(nil, (2..1).max)
assert_equal(1, (1...2).max)
assert_equal(2.0, (1.0..2.0).max)
assert_equal(nil, (2.0..1.0).max)
assert_raise(TypeError) { (1.0...2.0).max }
assert_equal(-0x80000002, ((-0x80000002)...(-0x80000001)).max)
assert_equal(0, (0..0).max)
assert_equal(nil, (0...0).max)
こうしてみると、以下の仕様に一貫性がないように感じます。
assert_equal(nil, (2..1).max)
assert_equal(nil, (2.0..1.0).max)
assert_raise(TypeError) { (1.0...2.0).max }
次の、tarui さんによる追加は一貫性が無い方に分類できると思います。
assert_raise(TypeError) { (1.5...2).max }
assert_raise(TypeError) { (1...1.5).max }
Range#max の明確な定義が必要ですよね。
既に決まっているなら良いのですが、少なくとも RDoc には
Returns the maximum value in <i>rng</i>. The second uses
the block to compare values. Returns nil if the first
value in range is larger than the last value.
このようにしか書かれていませんから、明確に定義されてるようには思えません。
Range は Enumerable を include しているので Range#max は Enumerable#max なんだと思います。
そうすると、Range#each が下限が succ をサポートする事を要請しているので、
下限が Float だったら有無を言わさず TypeError になるべきです。従って、
assert_equal(nil, (2.0..1.0).max)
このアサーションは間違っていることになります。
また、上限が succ をサポートしている必要は無いようですから、
tarui さんが追加しようとしている
assert_raise(TypeError) { (1...1.5).max }
これも間違っています。TypeError ではなく 1 を返すはずです。
On 2011年4月21日木曜日 at 8:55, KOSAKI Motohiro wrote:
> わたしRubyをまったく知らないんですけど、rangeに対するmaxってようするに
>
> 1) rangeの範囲に収まる整数値をすべて取り出す
> 2) その集合に対して、最大の数値を取り出す
>
数値範囲の最大値を求めるだけなら下限が succ をサポートしている必要はないので、
小崎さんが言うように数値範囲を適切に扱いたくなるのはとても共感できます。
しかし、数値範囲としての振る舞いを考えようとすると範囲の下限が Float や BigDecimal
のような inexact 数の場合に難しくなります。
Float と BigDecimal は、それ自身が有限の広がりを持っているので、
範囲の境界がぼやけてしまいます。ですから
assert_raise(TypeError) { (1.0...2.0).max }
この振る舞いが正しいかどうか決めるためには、
整数の 1 (つまり 1 以外の何者でもない) が 1.0 ... 2.0 の範囲に含まれるかどうかを
定義する必要があります。
Float の 1.0 は、C の double が IEEE754倍精度の場合、半開区間 [1, 1 + 1/2^51) に含まれる
すべての実数を代表する数なので、範囲 1.0 ... 2.0 に整数 1 が含まれるかどうかは
基本的には文脈依存でしか判断できない問題になります。
# リテラルの 1.0 は基本的に 1 と等しいんでしょうけど、
# 何らかの計算過程で得られた 1.0 が 1 と等しいかどうかは値だけでは判断できませんから。
--
Kenta Murata
Sent with Sparrow