[#34261] ComplexFloat — "Kenta Murata" <muraken@...>

村田です.

117 messages 2008/04/06
[#34280] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

村田です.

[#34286] Re: ComplexFloat — Nobuyoshi Nakada <nobu@...> 2008/04/10

なかだです。

[#34288] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

むらたです.

[#34290] Re: ComplexFloat — "U.Nakamura" <usa@...> 2008/04/10

こんにちは、なかむら(う)です。

[#34293] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

むらたです.

[#34296] Re: ComplexFloat — "U.Nakamura" <usa@...> 2008/04/10

こんにちは、なかむら(う)です。

[#34298] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

むらたです.

[#34300] Re: ComplexFloat — Tanaka Akira <akr@...> 2008/04/10

In article <761216ce0804100221x67f10f12iab12b0e35b6f50e4@mail.gmail.com>,

[#34301] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

むらたです.

[#34303] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/10

まつもと ゆきひろです

[#34314] Re: ComplexFloat — Tadayoshi Funaba <tadf@...> 2008/04/10

利点としては、拡張ライブラリが書きやすい、ということ。正当化の理由とし

[#34316] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

むらたです.

[#34317] Re: ComplexFloat — Tadayoshi Funaba <tadf@...> 2008/04/10

> 私にはいびつな進化という感じはしません.むしろ,せっかく C で実装できるのに

[#34318] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

むらたです.

[#34322] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/10

まつもと ゆきひろです

[#34328] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/11

むらたです.

[#34331] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/11

まつもと ゆきひろです

[#34340] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/11

むらたです.

[#34341] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/11

まつもと ゆきひろです

[#34362] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/12

むらたです.

[#34363] Re: ComplexFloat — Tanaka Akira <akr@...> 2008/04/12

In article <761216ce0804120723n16bfbad7qdae90f142978d256@mail.gmail.com>,

[#34367] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/12

むらたです.

[#34368] Re: ComplexFloat — Tanaka Akira <akr@...> 2008/04/12

In article <761216ce0804121011h6132d58fh4916ecbb29d58690@mail.gmail.com>,

[#34369] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/12

むらたです.

[#34364] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/12

まつもと ゆきひろです

[#34366] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/12

むらたです.

[#34386] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/13

まつもと ゆきひろです

[#34415] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/15

むらたです.

[#34439] Re: ComplexFloat — Shin-ichiro HARA <sinara@...> 2008/04/17

原です。

[#34442] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/17

まつもと ゆきひろです

[#34451] Re: ComplexFloat — Shin-ichiro HARA <sinara@...> 2008/04/18

原です。

[#34455] Re: ComplexFloat — Tadayoshi Funaba <tadf@...> 2008/04/18

> 1. ComplexFloat を組込みにし、Complex を標準ライブラリとして提供する。

[#34457] Re: ComplexFloat — Shin-ichiro HARA <sinara@...> 2008/04/20

原です。

[#34458] Re: ComplexFloat — Tadayoshi Funaba <tadf@...> 2008/04/20

> 分かりににくかったですが、これは、ComplexFloat を含めた組込みの数体系が

[#34502] Re: ComplexFloat — sheepman <sh@...> 2008/04/24

こんばんは sheepman です。

[#34601] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/05/07

まつもと ゆきひろです

[#34603] Re: ComplexFloat — keiju@... (石塚圭樹) 2008/05/07

けいじゅ@いしつかです.

[#34614] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/05/08

まつもと ゆきひろです

[#34621] Re: ComplexFloat — keiju@... (石塚圭樹) 2008/05/08

けいじゅ@いしつかです.

[ruby-dev:34362] Re: ComplexFloat

From: "Kenta Murata" <muraken@...>
Date: 2008-04-12 14:23:20 UTC
List: ruby-dev #34362
むらたです.

2008/4/11 Yukihiro Matsumoto <matz@ruby-lang.org>:
>  |その上で,やはり閉じた複素数もあるべきだと思います.そして,最適化等の
>  |可能性を考えれば,閉じた複素数が組込みで提供されている方が自然である
>  |と思います.
>
>  単純さや他のクラス構成との整合性を犠牲にしてまで閉じた複素数
>  クラスを別に用意すべき理由は最適化だけですか?

最大の理由は最適化です.以下のような理由もあります.

成分が浮動小数点になってしまうと,その値は他の表現に暗黙に変換できません.
言い換えると,浮動小数点数を持つ複素数は,Rational や Integer を持つ複素数を
全部食べてしまうんです.それだけでなく,たとえば CMath.sin,CMath.exp などの
数学関数の結果は浮動小数点数を持つ複素数になるので,生成される複素数の多くが
浮動小数点数を持つことが予想できます.

ほとんどの Complex の成分が浮動小数点数なんだし,浮動小数点数から他の型には
変換されないんだから,ComplexFloat として特殊化しても良いだろうとも考えています.

# sin(π / 6) = 1/2 ですが,Math.sin(Math::PI / 6) の結果として Rational(1, 2) を
# 返してはならないという事に注意してください.Math::PI は π ではなく,
# π の近似値です.

>  現在のYARVの最適化実装を考えると、組み込みクラス(たとえば
>  Float)が変更されていない時には高速なプリミティブが動くという
>  動作をComplex(やRational)に適用してはいけない(or できない)理
>  由は無いと思うのですが。

現在の Complex は実部が Float で虚部が Rational のような状態になれます.
ですから,Complex に対してそのような最適化を行うとすると,成分の型検査を
実部・虚部に分けて毎回行う必要があります.ComplexFloat を導入すると,
データフロー解析で確実に ComplexFloat になることが分かっている部分は
型検査なしで最適化できます.

# ComplexFloat が絡む計算では ComplexFloat しか出てこない事に注意してください.
# ただし,演算の相手が Complex(BigDeciam, BigDeciam) である場合については,
# どうするべきかまだ分かりません.BigDecimal と Float は仮数部の基数の底が
# 異なっており,暗黙に変換すべきではないからです.

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

In This Thread