[#30426] CGI でグラフを描くときにお勧めのライブラリは? — 堀川 久 <vzw00011@...>

こんにちは。

12 messages 2001/07/01

[#30453] syntax check without execution? — Tanaka Akira <akr@...17n.org>

最近、eRuby のまねごとをしていて、そのなかで Ruby のコードを生成してい

16 messages 2001/07/04
[#30455] Re: syntax check without execution? — matz@... (Yukihiro Matsumoto) 2001/07/04

まつもと ゆきひろです

[#30479] Object#dup — "Shin'ya Adzumi" <adzumi@...>

あづみです。

20 messages 2001/07/05

[#30512] open errno EALREADY triggerd — "Inoue" <inoue@...>

井上です。

16 messages 2001/07/08

[#30514] Ruby module frame work? — Takahiro Kambe <taca@...>

こんにちは。

16 messages 2001/07/09
[#30515] Re: Ruby module frame work? — matz@... (Yukihiro Matsumoto) 2001/07/09

まつもと ゆきひろです

[#30529] InterBase を使用したい — "YOUJI KUROKAWA" <CQE10242@...>

環境

22 messages 2001/07/09

[#30530] Question about script on the book "Ruby nyuumon" — NAWATE Masahiko <agul@...>

縄手@松江と言います。

17 messages 2001/07/09
[#30531] Re: Question about script on the book "Ruby nyuumon" — rubikitch <rubikitch@...> 2001/07/09

From: NAWATE Masahiko <agul@mag.shimane-u.ac.jp>

[#30533] Re: Question about script on the book "Ruby nyuumon" — NAWATE Masahiko <agul@...> 2001/07/09

縄手@松江です。

[#30734] UML クラス図と Ruby の記述についての対応 — Ken-ichi HASHIMOTO <ken@...>

橋本@福井県在住です。

13 messages 2001/07/28

[#30764] int/int => float? — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

50 messages 2001/07/31
[#30767] Re: int/int => float? — keiju@... (石塚圭樹) 2001/07/31

けいじゅ@日本ラショナルソフトウェアです.

[#30768] Re: int/int => float? — matz@... (Yukihiro Matsumoto) 2001/07/31

まつもと ゆきひろです

[#30770] Re: int/int => float? — Take_tk <ggb03124@...> 2001/07/31

たけ(tk)です。

[#30771] Re: int/int => float? — matz@... (Yukihiro Matsumoto) 2001/07/31

まつもと ゆきひろです

[#30785] Re: int/int => float? — Konishi@... (Hiromasa KONISHI) 2001/07/31

 KONISHI Hiromasaです。

[ruby-list:30788] Re: int/int => float?

From: IKEGAMI Daisuke <daisu-ik@...>
Date: 2001-07-31 11:12:48 UTC
List: ruby-list #30788
いけがみです。

一点だけ。効率が重要なのはよくわかります。

[ruby-list:30785] で KONISHI さんは書きました:
  2. 間違うのはマニュアルをちゃんと読まないやつが悪い.効率が重要だ.

しかし、マニュアルを書く側に少し負担がかかります。

ある計算が、int/int を内部で用いるアルゴリズムで実装でき、
かつ int/int を内部で用いないアルゴリズムでも実装できるとします。

このとき、プログラマの実装とユーザの知識が食い違ったとき、
一見、ユーザにとっては計算結果が間違って見えることがあります。
(僕も前に出したメール[ruby-list:30703]ではいろいろと勘違いしてました)
したがって、この場合はマニュアルに書いてあるほうが親切でしょう。

たとえば、Matrix クラスでは determinant の計算で int/int を内部に使います。

2 * 2 行列 ( a b ) の行列式は ad - bc で与えられますが、
           ( c d )
(この場合、 int/int = float? による問題は派生しない)

Matrix クラスではこの公式とは別の方法で計算します。
この別の方法は内部で割算を行なうため、 int / int = int であることより、
(ad-bcで計算してくれるとユーザが勝手に思っていた)結果とは異なります。
  [ruby-list:30703] ではそれを指摘したつもりですが書き方が悪いし、
  僕の主張ははなはだ本質を欠いています。

さて、 Matrix クラスのマニュアルはどう書いたらいいでしょう。
今回の問題はシンプルなので、注意書きをつけとけばいいですが、
一般に、ある計算に対して、
  int/int を内部で用いるアルゴリズムで実装でき、
  かつ int/int を内部で用いないアルゴリズムでも実装できるか否か?
という質問に答えるのは、ちょっと難しいのではないでしょうか。
(特にプログラマには)

一方、
数のオブジェクトが、分数表現と、浮動小数表現ないしは整数表現を、
両方保持したまま計算をすすめるならば、若干混乱は避けられるように思われます。
(あたかも文字列クラスが文字列とその長さを保持しているように)

もしくは、あらゆる数は rational で整数変換を都合のいい種類だけ持つ、
 (内部表現 1 / 2 -> 変換 0.5, 0, 例外, ...)
という実装でもいいかもしれません。

たとえば、数式処理ソフトウエア Mathematica は
  int / int = rational
  float / int = float
  int / float = float
という方針をとっているようです。
--
池上 大介
Daisuke IKEGAMI <daisu-ik@is.aist-nara.ac.jp>
奈良先端科学技術大学院大学 情報科学研究科
情報処理学専攻 情報基礎学講座 関研究室

In This Thread