[#20490] [BUG] evalがらみでSIGSEGV — "yamamoto madoka" <dan@...2.so-net.ne.jp>
こんにちは、山本 円と申します。
[#20495] 不正なバイト列とのマッチ — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#20499] Re: [ruby-cvs] ruby/ext/curses: * string.c (rb_str_shared_replace): clear flags before copy. — nobu.nakada@...
なかだです。
まつもと ゆきひろです
わたなべです。
まつもと ゆきひろです
わたなべです。
[#20525] [BigDecimal] changing rule of coerce — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>
斎藤です。
小林です。
まつもと ゆきひろです
小林です。
小林です。
前田です。
小林です。
小林です。
小林です。
小林です。
小林です。
[#20570] Marshal upgrade — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
咳といいます。
まつもと ゆきひろです
まつもと ゆきひろです
新井です。
新井です。
まつもと ゆきひろです
咳といいます。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#20580] add library(Re:ruby-dev:20570) — たむらけんいち <sgs02516@...>
たむらです。
なひです。
In message <038d01c349cb$eaad71d0$93222fc0@sarion.co.jp>,
まつもと ゆきひろです
In message <1058171960.400840.10041.nullmailer@picachu.netlab.jp>,
話をそらしてしまうかもしれませんが、
In message <20030714.183104.09092354.taca@back-street.net>,
In message <20030715.013655.424936247.gotoyuzo@kotetsu.does.notwork.org>
In message <20030715.025907.26217115.taca@back-street.net>,
In message <20030715.051853.968499478.gotoyuzo@kotetsu.does.notwork.org>
In message <20030721.163444.09092937.taca@back-street.net>,
In message <20030721.191306.60866533.gotoyuzo@kotetsu.does.notwork.org>
In message <20030721.211845.20473808.taca@back-street.net>,
In message <20030722.002037.774147317.gotoyuzo@kotetsu.does.notwork.org>
In message <20030722.003236.72433302.taca@back-street.net>,
[#20582] rexmlのuconv依存 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
まつもと ゆきひろです
In article <1057770842.878440.16422.nullmailer@picachu.netlab.jp>,
なかだです。
In article <200307100751.h6A7pLFs003667@sharui.nakada.kanuma.tochigi.jp>,
[#20606] ruby-1.8.0 on BSD/OS — OHARA Shigeki <os@...>
大原です。
[#20613] compiling Ruby on AIX (powerpc-ibm-aix4.3.3.0) and Alpha OSF/1 (alphaev67-dec-osf5.1) — NISHIMATSU Takeshi <t-nissie@...>
西松と申します.
なかだです。
西松です. お返事が遅くなり申し訳ありません.
[#20631] SOAP4R in 1.8.0? — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#20655] frozen ThreadGroup — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
In article <1058719939.886480.22830.nullmailer@picachu.netlab.jp>,
[#20680] 1.8.0 on IA64 etc. — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#20691] Re: [Oniguruma] explicit capture — kkosako@...
> -----Original Message-----
[#20716] Re: [Oniguruma] explicit capture — kkosako@...
> -----Original Message-----
[#20748] [BigDecimal] exception handling — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>
斎藤です。
[#20765] Re: [ruby-cvs] ruby/lib: * lib/tmpdir.rb: new library to get temporary directory path, — WATANABE Hirofumi <eban@...>
わたなべです。
まつもと ゆきひろです
わたなべです。
まつもと ゆきひろです
わたなべです。
[#20780] complex.rb — Masahiro TANAKA <masa@...>
complex.rb についての修正案を[ruby-math:00543]で提案しましたが、その後
まつもと ゆきひろです
けいじゅ@いしつかです.
At Tue, 22 Jul 2003 17:30:31 +0900, Yukihiro Matsumoto wrote:
まつもと ゆきひろです
けいじゅ@いしつかです.
At Sat, 26 Jul 2003 06:52:21 +0900, 石塚圭樹 wrote:
[#20791] 1.8.0 preview4 schedule — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
永井@知能.九工大です.
[#20795] warning: terminated thread — Masatoshi SEKI <m_seki@...>
咳といいます。
mput です。こんばんわ。
まつもと ゆきひろです
[#20800] 0**(-1) with rational — Tanaka Akira <akr@...17n.org>
そういえば思い出したのですが、rational を require しているときとしてい
At Wed, 23 Jul 2003 03:30:41 +0900, Tanaka Akira wrote:
[#20810] Rational 始めました。 — Shin-ichiro HARA <sinara@...>
原です。
けいじゅ@いしつかです.
In article <200307241940.EAA14225.keiju@ishitsuka.com>,
けいじゅ@いしつかです.
In article <200307271500.AAA04363.keiju@bc.mbn.or.jp>,
[#20818] ThreadGroup#wait — nobu.nakada@...
なかだです。
まつもと ゆきひろです
[#20868] ruby 1.8.0 preview4 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#20887] ext/openssl undefined BN_pseudo_rand_range — Kazuhiro Yoshida <moriq@...>
もりきゅうです。
[#20915] [BUG] errno == 0 — Kazuhiro Yoshida <moriq@...>
もりきゅうです。win32だけかもしれません。
まつもと ゆきひろです
もりきゅうです。
[#20932] move ChangeLog — Tanaka Akira <akr@...17n.org>
提案なんですが、1.8.0 が出たらそこまでのぶんの ChangeLog を移動しませ
[#20949] multiple Tk interpreter support — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
[#20954] ruby 1.8.0 preview5 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
もりきゅうです。
Siena. です。
[#20957] [BigDecimal] conflict between Numeric#div and BigDecimal#div — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>
斎藤です。
At Mon, 28 Jul 2003 18:26:20 +0900, Tadashi Saito wrote:
まつもと ゆきひろです
At Mon, 28 Jul 2003 21:16:08 +0900, Yukihiro Matsumoto wrote:
まつもと ゆきひろです
At Tue, 29 Jul 2003 14:43:19 +0900, Yukihiro Matsumoto wrote:
原です。
[#20989] Re: [Oniguruma] explicit capture — kkosako@...
> -----Original Message-----
[#21027] -W option — WATANABE Hirofumi <eban@...>
わたなべです。
[ruby-dev:20552] Re: [BigDecimal] renaming proposal
斎藤です。なにか誤解していたみたいです。 ----- Original Message ----- From: "Shigeo Kobayashi" <shigeo@tinyforest.gr.jp> Sent: Tuesday, July 08, 2003 4:59 PM Subject: [ruby-dev:20550] Re: [BigDecimal] renaming proposal > > 「現状のbigdecimal.cの数学関数の部分は削除して、Rubyで > > 書き直し、それを標準添付の一部としたい」 > > > > ということだと思ったのですが、そうではない、ということでしょうか。 > いや、そういうことを意味したかったんですが... > > > 数学関数を標準添付したくないということですか? > 標準添付できたらいいなと思っています。 了解です。自分が誤解していたらしく、すみませんでした。 とりあえず今まで作った分を、添付してみました。 [ruby-dev:20547]で添付したテストも、少なくともN=700くらいまでは OKになることを確認済みです。 ただ自分は小林さんと違い、あまり数学に造詣が深くありません。 むしろ苦手だった方です。 今回のスクリプトも、奥村先生のアルゴリズム辞典や 数学の本を片手にほぼそのまま、コピーしただけです。 ですので、いろいろと修正して下さればありがたいです。 (自分も安直にテーラー展開(正確にはマクローリン展開?)した だけなので…) > 要するにBigDecimal::E(n)等が、正確に n 桁を保証できてい > ないということだと思います。(計算内部の)中間変数の精度 > をもう少し上げればましになるとは思いますが、x**n/(n!) のよう > な計算を繰り返し実行する単純なテーラー展開では所詮こん > なものかもしれませんね。 やはり、削除したくなってきた! いやいや、落ち着いてください ^^;; 自分も、正確な n 桁を保証するという方法のが分かりませんでした。 そこでとりあえず、ループ中の足し算の中で 「もし以前の結果と足した後の結果の n 桁が等しければ ループを抜ける」 という方法を取りました。が、数学的にはとてもあやしいと思います。 > > 手元で作ったスクリプトはもちろんそうしてありますが、 > > BigDecimal自体について言っているつもりでした。 > もちろん、 bigdecimal.c 内でより良いものがサポートできれば > 申し分ないです。ただ、現状の関数は我ながらお粗末なので、 > できれば bigdecimal.c から E や sincos 等を削除したいと思っ > ているわけです。 いやいや、そこまでおっしゃるほど悪いものではないと思いますよ。 添付したものは結構冗長なものになってしまいました。 EとPIはまだ実装していません。 とりあえずのたたき台バージョンということで。 おまけに、BigDecimal#to_fを再定義しています。 この話題は、また別のスレッドで。 --- 斎藤ただし
Attachments (1)
require 'bigdecimal'
class BigDecimal
def to_f
f, x, y, z = self.split
s = '0.' + x
f * s.to_f * y ** z
end
end
module Math
alias sqrt! sqrt
alias log! log
alias sin! sin
alias cos! cos
alias exp! exp
def sqrt(x, n = nil)
maxnr = 100
unless x.class == BigDecimal
raise ArgumentError, 'wrong number of arguments(2 for 1)' unless n.nil?
return sqrt!(x)
end
raise ArgumentError, "argument out of domain" if x < 0
return x if x.zero? || x.infinite? || x.nan?
if n.nil?
n = [x.prec[0], x.exponent].max
elsif n <= 0
raise ArgumentError, "zero or negative argument"
end
two = BigDecimal.new('2')
unless x > Float::MAX
f = sqrt!(x.to_f)
s = BigDecimal.new(f.to_s)
else
one = BigDecimal.new('1')
s = (x > one) ? x : one
end
exp = s.exponent
t = nil
maxnr.times do
last = s
s = (x/s + s) / two
t = s.truncate(n-exp)
break if s == last || (s.prec[0] >= n && t == last.truncate(n-exp))
end
t
end
def log(x, n = nil)
maxnr = 100
unless x.class == BigDecimal
raise ArgumentError, 'wrong number of arguments(2 for 1)' unless n.nil?
return log!(x)
end
raise ArgumentError, "argument out of domain" if x <= 0
return x if x.infinite? || x.nan?
if n.nil?
n = [x.prec[0], x.exponent].max
elsif n <= 0
raise ArgumentError, "zero or negative argument"
end
u = (x - 1) / (x + 1)
u2 = u * u
s = 2 * u
exp = s.exponent
t = nil
i = 1
maxnr.times do
last = s
u *= u2
i += 2
s += 2 * u / i
t = s.truncate(n-exp)
break if s == last || (s.prec[0] >= n && t == last.truncate(n-exp))
end
t
end
def sin(x, n = nil)
maxnr = 100
unless x.class == BigDecimal
raise ArgumentError, 'wrong number of arguments(2 for 1)' unless n.nil?
return sin!(x)
end
zero = BigDecimal.new('0')
nan = zero / zero
return nan if x.infinite? || x.nan?
if n.nil?
n = [x.prec[0], x.exponent].max
elsif n <= 0
raise ArgumentError, "zero or negative argument"
end
one = BigDecimal.new('1')
two = BigDecimal.new('2')
x1 = x
x2 = x * x
sign = one
y = x
m = one
d = one
z = nil
maxnr.times do
last = y
sign = -sign
x1 *= x2
m += two
d *= (m-one) * m
y += sign * x1 / d
z = y.truncate(n)
break if y == last || (y.prec[0] >= n && z == last.truncate(n))
end
z
end
def cos(x, n = nil)
maxnr = 100
unless x.class == BigDecimal
raise ArgumentError, 'wrong number of arguments(2 for 1)' unless n.nil?
return cos!(x)
end
zero = BigDecimal.new('0')
nan = zero / zero
return nan if x.infinite? || x.nan?
if n.nil?
n = [x.prec[0], x.exponent].max
elsif n <= 0
raise ArgumentError, "zero or negative argument"
end
one = BigDecimal.new('1')
two = BigDecimal.new('2')
x1 = one
x2 = x * x
sign = one
y = one
m = zero
d = one
z = nil
maxnr.times do
last = y
sign = -sign
x1 *= x2
m += two
d *= (m-one) * m
y += sign * x1 / d
z = y.truncate(n)
break if y == last || (y.prec[0] >= n && z == last.truncate(n))
end
z
end
def exp(x, n = nil)
maxnr = 100
unless x.class == BigDecimal
raise ArgumentError, 'wrong number of arguments(2 for 1)' unless n.nil?
return exp!(x)
end
zero = BigDecimal.new('0')
return zero if x.infinite? == -1
return x if x.nan? || x.infinite?
if n.nil?
n = [x.prec[0], x.exponent].max
elsif n <= 0
raise ArgumentError, "zero or negative argument"
end
one = BigDecimal.new('1')
x1 = one
y = one
d = one
m = zero
z = nil
maxnr.times do
last = y
x1 *= x
m += one
d *= m
y += x1 / d
z = y.truncate(n)
break if y == last || (y.prec[0] >= n && z == last.truncate(n))
end
z
end
module_function :sqrt, :sqrt!
module_function :log, :log!
module_function :sin, :sin!
module_function :cos, :cos!
module_function :exp, :exp!
end
#sqrt(BigDecimal.new(ARGV[0]))