無限精度実数ライブラリRealLib
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/07/20(月) 12:36:39本家
The RealLib Project
ttp://www.brics.dk/~barnie/RealLib/
[XR] RealLib ソースコード勉強会 (1:終)
ttp://d.hatena.ne.jp/hzkr/20080915
[XR] RealLib ではじめる誤差ゼロ実数計算
ttp://d.hatena.ne.jp/hzkr/20080909
0002デフォルトの名無しさん
2009/07/20(月) 16:27:240003デフォルトの名無しさん
2009/07/20(月) 20:40:26ま、そう言うな。
0004デフォルトの名無しさん
2009/07/21(火) 01:06:13任意の無理数 a と、a と無限小しか違わない数 a' の間にある数を表現できるくらい?
00051
2009/07/21(火) 05:15:20> a と無限小しか違わない数 a'
無限小infinitesimalという言葉は数学においては厳密に定義されている物で、
勘や憶測の入る物ではありません。
以下、キースラー公理系を前提にする普通の超実数系で話をしましょう。
まず君の言うことは
st(a') = a
ということですね。
>任意の無理数 a と、a と無限小しか違わない数 a' の間にある数
その様な超実数xは
st(x) = a
ですが、
RealLibはC++用無限精度の「実数」ライブラリですので、
x∈Rでないと当然表せません。
0006デフォルトの名無しさん
2009/07/21(火) 05:16:410007デフォルトの名無しさん
2009/07/21(火) 23:24:07言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0008デフォルトの名無しさん
2009/07/22(水) 06:43:370009デフォルトの名無しさん
2009/07/22(水) 20:50:130010アイ
2009/07/22(水) 20:59:230011デフォルトの名無しさん
2009/07/22(水) 21:17:51http://chimp-sanctuary.org/oursanctuary/hitori.htm
0012デフォルトの名無しさん
2009/07/22(水) 22:06:210013デフォルトの名無しさん
2009/07/22(水) 22:20:24フリーのライブラリなんてそうそうないよな。
上限が1/2^(2^31)だったとしても。
0014デフォルトの名無しさん
2009/07/22(水) 22:29:37読む気になるんですが
・・・ってのは甘えですかね?
0015デフォルトの名無しさん
2009/07/23(木) 00:01:36おかしい所を辞書で直していくしかないな
俺はいつもそうやってる
それが一番早い
0016デフォルトの名無しさん
2009/07/23(木) 00:04:47ライブラリ想像してたけど違うのかな
0017デフォルトの名無しさん
2009/07/23(木) 06:29:04あとMathmaticaはライブラリじゃなくね?
0018デフォルトの名無しさん
2009/07/23(木) 08:18:52どう保持されるの?何バイト?
0019デフォルトの名無しさん
2009/07/23(木) 12:45:48そして必要に応じた精度で値を返しているらしい。
だから例えば1/3*3は内部的には1なわけではなく、必要に応じて自動的に必要な精度を定めて1.00000000000000000000000…と返ってくる。
0020デフォルトの名無しさん
2009/07/23(木) 13:52:52どうがんばっても計算しきれない関数があるから、そういう方法
(内部で元の形を保持)しかないような気がする。
気がする、とか書くとソース嫁とか言われそうだが。
0021デフォルトの名無しさん
2009/07/23(木) 19:02:580022デフォルトの名無しさん
2009/07/24(金) 02:43:34用途がよくわからんな
0023デフォルトの名無しさん
2009/07/24(金) 02:54:41必ず有効桁いっぱいまで精度保証されるって意味なのか…
やっぱりいらね。
0024デフォルトの名無しさん
2009/07/24(金) 04:07:040025デフォルトの名無しさん
2009/07/24(金) 07:38:010026デフォルトの名無しさん
2009/07/24(金) 13:04:17こういう物は無限ストリーム(遅延ストリーム)で作れば
必要桁まで出して中断したり、その後も継続できたりするよ
ググればLISPとかHaskellとかのコードが出てくると思う
0027デフォルトの名無しさん
2009/07/24(金) 14:16:58だからMathmaticaはライブラリじゃなくね?
0028デフォルトの名無しさん
2009/07/24(金) 14:18:03その通りだと思うよ。
>>23
そうじゃなくね?
0029デフォルトの名無しさん
2009/07/24(金) 14:22:21経験者とか、比較してみた人とかっていない??
0030デフォルトの名無しさん
2009/07/24(金) 19:45:42ライブラリかどうかなんて関係ないでしょ
0031デフォルトの名無しさん
2009/07/24(金) 20:17:12だってライブラリとライブラリじゃないものを
誤って比較しようとしている人がいたら
全然別物だよ?
って注意してあげるべきでは?
0032デフォルトの名無しさん
2009/07/24(金) 20:26:150033デフォルトの名無しさん
2009/07/24(金) 20:31:08別にそれだけとは言わねぇけどさ。
0034デフォルトの名無しさん
2009/07/24(金) 23:49:100035デフォルトの名無しさん
2009/07/25(土) 00:11:15ライブラリでないものはライブラリでないと見抜ける人でないと(C++を使うのは)難しい
ってことを伝えたかっただけだ。
0036デフォルトの名無しさん
2009/07/25(土) 00:14:57誤差に弱いし、超越関数使ってないし、効果すぐ出そうだよね。
ちょっと試してみようかな。
、、と思ったけど、入力パラメータが実数な時点で
既に誤差ってるんだった。
FPUとSIMD-FPの代わりに、こいつをHWインプリメントとか
出来んもんかね。
0037デフォルトの名無しさん
2009/07/25(土) 04:37:56Real("0.1") → 誤差なし
か。なるほど。
0038デフォルトの名無しさん
2009/07/25(土) 09:52:090039デフォルトの名無しさん
2009/07/25(土) 10:09:15Real(0.1) → 誤差あり
Real("0.1") → 誤差なし
Real(1.5) → 誤差なし
Real("1.5") → 誤差なし
ふーん。なるほど。
0040デフォルトの名無しさん
2009/07/25(土) 10:17:40比較演算子==で比較すると無限ループするという仕様は
ちょっと悲しい。
妥協する方法はないのだろうか?
0041デフォルトの名無しさん
2009/07/25(土) 10:20:550042デフォルトの名無しさん
2009/07/25(土) 10:21:44解析的に等しいかどうかのチェックはやっぱ難しいのかね
0043デフォルトの名無しさん
2009/07/25(土) 11:32:38結局処理に充てられる時間の都合上有限精度
無限精度であることは唯の一度も無い!
0044デフォルトの名無しさん
2009/07/25(土) 11:36:430045デフォルトの名無しさん
2009/07/25(土) 12:05:15そんな誰もが解り切っていることを言わなくても。
そもそも>>6によれば実装上の限界が定まっているらしいじゃないか。
0046デフォルトの名無しさん
2009/07/25(土) 12:22:300047デフォルトの名無しさん
2009/07/25(土) 12:50:140048デフォルトの名無しさん
2009/07/25(土) 12:52:33有効桁数を指定して表示させることもできる
という Mathematica と同じようなことをしてると思われ
0049デフォルトの名無しさん
2009/07/25(土) 12:58:010050デフォルトの名無しさん
2009/07/25(土) 13:18:340051デフォルトの名無しさん
2009/07/25(土) 13:19:27お前はこのスレで何を読んできたんだ?w
0052デフォルトの名無しさん
2009/07/25(土) 13:22:280053デフォルトの名無しさん
2009/07/25(土) 15:00:40解析的に等しいかどうかチェックした方がいいんだろうけど、
Mathematica でもこのあたり完璧にできるの?
等価な式を引き算して simplify したら 0 になるとか
0054デフォルトの名無しさん
2009/07/26(日) 00:26:400055デフォルトの名無しさん
2009/07/26(日) 00:40:15ライブラリかどうかとか言ったら嗤うぞw
0056デフォルトの名無しさん
2009/07/26(日) 10:04:351. ライブラリかどうかも「当然」違うけど
2. 文字処理なども違うだろ?
3. 制作者も違えば
4. ライセンスも違う。
5. 普及率も違う。
むしろどこが同じなの?
0057デフォルトの名無しさん
2009/07/26(日) 10:17:280058デフォルトの名無しさん
2009/07/26(日) 10:55:35良いから答えろw
0059デフォルトの名無しさん
2009/07/27(月) 17:35:540060デフォルトの名無しさん
2009/07/27(月) 19:19:29マンデルブローの拡大デモにアキレスと亀のスプライトを入れれば完成
0061デフォルトの名無しさん
2009/07/27(月) 19:32:070062デフォルトの名無しさん
2009/07/27(月) 21:48:30面白いな。
いつ使うのか知らないけど。
0063デフォルトの名無しさん
2009/07/27(月) 22:32:500064デフォルトの名無しさん
2009/07/28(火) 07:06:35負ける前に時間を停めればその時刻までは負けてない
0065デフォルトの名無しさん
2009/07/28(火) 10:35:06RealLibについて語るしかなかろう。
0066デフォルトの名無しさん
2009/07/28(火) 10:54:25速度はどの程度でるんだろうか。
ちなみに「無限」とか言わずに、精度10^x倍ライブラリ、とした方が
関心持つやつが増えると思うよ>開発者
0067デフォルトの名無しさん
2009/07/28(火) 11:24:20届くわけねーだろ
0068デフォルトの名無しさん
2009/07/28(火) 11:29:29デンマーク?
0069デフォルトの名無しさん
2009/07/28(火) 11:46:260070デフォルトの名無しさん
2009/07/29(水) 13:30:580071デフォルトの名無しさん
2009/07/31(金) 18:56:380072デフォルトの名無しさん
2009/08/02(日) 23:54:590073名無しさん
2009/08/04(火) 04:45:520074デフォルトの名無しさん
2009/08/09(日) 11:08:28面白そうだが、
精度保証付き数値計算 C++ライブラリ
でググってもライブラリが見つからん。
0075デフォルトの名無しさん
2009/08/09(日) 12:11:36あっちは除算によるまるめ誤差は出ないんだっけか?
0077デフォルトの名無しさん
2009/08/11(火) 16:00:410078名無しさん
2009/08/12(水) 18:49:46特定のライブラリではない汎用の方法がある。
条件は:
(1)IEEE-754をサポートしている
(2)対象とする計算が線形である
アセンブラかC/C++のインラインアセンブリで、丸め方法を捜査する。
(答え) = {(全部切り上げで計算した結果)+(全部切り下げで計算した結果)} / 2
(精度) = ABS{(全部切り上げで計算した結果)ー(全部切り下げで計算した結果)}
0079デフォルトの名無しさん
2009/08/12(水) 19:02:39ありがとう。
でも線形であるって相当厳しい要求じゃないか?
sinどころか累乗が出てきただけで死ぬっしょ?
0080デフォルトの名無しさん
2009/08/12(水) 19:18:28やっぱだめか
0081名無しさん
2009/08/12(水) 21:29:30でも、累乗は何とかなるかも
Matlabは使ったことないが、Octave風に書くと
X = [1, 2, 3, ..., N]'
X2 = X .* X;
X3 = X2 .* X;
(ダッシュ’は転置。 .* 内席ではなく要素同士の掛け算)
とすると
X3 == [1^3, 2^3, 3^3, 4^3, 5^3, 6^3, ... , N^2]'
0082デフォルトの名無しさん
2009/08/15(土) 13:16:190083デフォルトの名無しさん
2009/08/21(金) 00:31:200084名無しさん@そうだ選挙に行こう
2009/08/30(日) 07:50:300085デフォルトの名無しさん
2009/09/13(日) 20:35:530086デフォルトの名無しさん
2009/09/17(木) 14:43:39の時キラーケース?
0087デフォルトの名無しさん
2009/09/17(木) 14:50:37むしろそっちだけあればいい俺もいるが
0088デフォルトの名無しさん
2009/09/17(木) 20:53:40boost::bigintがいるじゃないか。
0089デフォルトの名無しさん
2009/09/17(木) 21:33:010090デフォルトの名無しさん
2009/09/19(土) 00:18:04ttp://pc12.2ch.net/test/read.cgi/tech/1250396380/
でも紹介されている程度にはboost::bigintは動くらしいぞ。
0091デフォルトの名無しさん
2009/10/04(日) 13:52:24完璧な(どんな2数に対しても汎用的に行える)等値判定は
アルゴリズムと計算時間が有限である限り不可能であることが証明されている
(チューリング機械の停止判定と同値になる)
0092デフォルトの名無しさん
2009/10/04(日) 17:01:540093デフォルトの名無しさん
2009/10/04(日) 21:34:47いや、必ずしも有理数とは限らないでしょ。
0094デフォルトの名無しさん
2009/10/11(日) 20:13:16そういう数を比較するには一般には無限に小数展開を続けるしかないから
有限の手続きでは等しいことの確認ができない。
特別なケース(有理数同士とか)に限れば等しいことを確認できる場合もあるけど。
ちなみに任意の計算可能実数が有理数かどうかを判定する手続きも一般
には存在しない。仮にそういう手続きが存在すると仮定すると、それを使って
任意の計算可能実数が等しいかどうか判定する手続きを構成できてしまう。
0095デフォルトの名無しさん
2009/10/11(日) 20:21:42それにこれはもともと無限精度じゃないし。
0096デフォルトの名無しさん
2009/10/11(日) 20:39:25ルールを追加することで(πと有理数は決して等しくならないとか)
そういう特定の数だけは比較できるようになるけど、
「任意の」二数を比較できるようにするには無限のルールを追加する必要があるので、
結局有限の手続きでは比較できない。
> それにこれはもともと無限精度じゃないし。
どういう意味? 無限精度というのは通常「その気になればどこまでも精度を
上げられる」という意味で定義される。本当に無限の桁数を求めるには無限の
時間と記憶容量が必要だから当たり前だけど。
このライブラリはそういう意味で無限精度。>>6の制限は単に高速化のための
実装上の都合に過ぎない。
0097デフォルトの名無しさん
2009/10/11(日) 20:50:23任意の計算可能実数が有理数かどうかを判定する手続きも(有理数の判定と同様)
存在しない。
0098デフォルトの名無しさん
2009/10/11(日) 20:51:17○ 任意の計算可能実数がπかどうかを判定する手続きも
0099オイラーの定数
2009/10/11(日) 21:27:350100デフォルトの名無しさん
2009/11/01(日) 10:25:170101デフォルトの名無しさん
2009/11/01(日) 20:49:50何をおっしゃりたいの?
・・・ってああ、もしかして2*asin(1)とかのこと?
でもasin()の引数に相当する所が
本当に1かどうかを判定する手続きも以下同文
0102デフォルトの名無しさん
2009/11/02(月) 02:06:30あらためて計算する必要すらない
0103デフォルトの名無しさん
2009/11/02(月) 05:25:030104デフォルトの名無しさん
2009/11/02(月) 12:53:50そして無限ループへ・・・
さらに幾つかの演算が2を表すことを覚えさせとかなきゃならないこともお忘れ無く。
0105デフォルトの名無しさん
2009/11/04(水) 12:43:320106デフォルトの名無しさん
2009/11/09(月) 00:14:340107デフォルトの名無しさん
2009/11/10(火) 12:00:22あーだのこーだの難癖つけても意味無いよ。
0108デフォルトの名無しさん
2009/11/10(火) 12:51:14任意の数式ソフトにケチをつける手続きも一般には存在しない。仮にそういう(ry
0109デフォルトの名無しさん
2009/11/19(木) 18:20:320110デフォルトの名無しさん
2010/01/17(日) 20:39:220111デフォルトの名無しさん
2010/02/04(木) 18:50:510112デフォルトの名無しさん
2010/02/17(水) 22:38:26そんなんで良いのか。
でもこれ意外に無償で使える無限精度ライブラリって
ないもんなぁ。
・・・無いよね??
0113デフォルトの名無しさん
2010/02/17(水) 23:55:57有限に切り詰めなきゃならないし、そうすると既存の浮動小数点と変わりない。
結局のところ使い道がない。
任意精度ライブラリという観点からも、double精度以上必要なケースがそれほどあるのか疑問。
0114デフォルトの名無しさん
2010/02/18(木) 19:49:08でもそれが必要な状況があるかどうかはまた別の話だが。
0115デフォルトの名無しさん
2010/04/04(日) 17:43:040116デフォルトの名無しさん
2010/07/21(水) 20:35:065^2010 の最上位の桁の数字は何か?
を解く時くらいしか用途ないよね。
0117デフォルトの名無しさん
2010/07/22(木) 16:47:31バカかお前は。
このライブラリはその問題を解けない。
上限が実は結構低いんだ。
0118デフォルトの名無しさん
2010/07/22(木) 16:49:190119デフォルトの名無しさん
2010/07/22(木) 21:45:560120デフォルトの名無しさん
2010/07/22(木) 22:36:06そんな実際的なこと聞かないでくだしあ
0121デフォルトの名無しさん
2010/07/23(金) 03:58:590122デフォルトの名無しさん
2010/07/23(金) 05:20:45> 5^2010 の最上位の桁の数字は何か?
8 かな?
0123デフォルトの名無しさん
2010/07/23(金) 17:28:078だな。
0124デフォルトの名無しさん
2010/07/23(金) 17:54:077^(5^2010)
ではどうだ。今度は計算できまい。
0125デフォルトの名無しさん
2010/07/23(金) 18:03:370126123
2010/07/23(金) 20:04:44どうすりゃいいんだ。
って最上位の桁だけ見るって入試問題があったなそういや!
0127デフォルトの名無しさん
2010/07/23(金) 20:49:29俺の理論によると最上位は2となったのだが
0128デフォルトの名無しさん
2010/07/23(金) 20:56:15a = (5^2010) * ln(7)/ln(10) = ----.67182...
よって A = 4.69... × 10^(7.1... × 10^1404)
0129デフォルトの名無しさん
2010/07/24(土) 15:46:43バカな私にはわかりません!
10^(7.1... × 10^1404)
の部分がかならず10の累乗なの?
つまり(7.1... × 10^1404)が必ず整数なの?
0130デフォルトの名無しさん
2010/07/25(日) 06:13:397.1... × 10^1404が自然数である事を証明しないと
4.69... の括りだしなんか意味が無い筈だぞ!だぞ!
0131127
2010/07/25(日) 07:23:28a = ----.4426...
じゃね?
んで
log 2 < 0.4426 < log 3 (底は10)
だから最上位の数字は2じゃね?
0133デフォルトの名無しさん
2010/07/25(日) 23:51:53おーーーーー、なるほど!!
0134デフォルトの名無しさん
2010/07/25(日) 23:53:22a = ----.4426...
ってのはどうやって算出したの?
その有効数字が正しいことはどうやって計算したの?
0135デフォルトの名無しさん
2010/07/26(月) 00:03:340136デフォルトの名無しさん
2010/07/26(月) 03:38:36対数なんぞ受験の時以来でもうすっかり追憶の彼方なんだが、
計算機叩きながらどうにかやってみた。
10^a = 7^(5^2010)
a = (5^2010) * ln(7)
ln(a) = 2010*ln(5) + ln(ln(7))
ln(a) = 1404.85661580987...
a = 10^(10^1404 * 7.1881281294763...)
この一番下の括弧の中の部分について、小数点以下3桁くらいの
数字がわかれば解決だとおもうんだが、桁溢れでオワタ\(^o^)/
0137デフォルトの名無しさん
2010/07/26(月) 04:14:54bc て計算機なのな。
でかい数字が扱えるみたいだから試してみよう。
常用対数が使えないので、まず自然対数にする。
l(x)はlog(自然対数)、e(x)はexp(指数関数)
ln(a) = 2010*ln(5) + ln(ln(7))
l(a) = 2010*l(5) + l(l(7)) - l(l(10))
a = e(2010*l(5) + l(l(7)) - l(l(10))) = 718812... ..5.1607...
a = ----.1607...
……えー、なんで?
上の桁の数字はちゃんと>>136と一致してるんだけどな。
>>136が既に駄目だったのか、それとも精度の問題か?
ln(2) = l(2)/l(10) = 0.3010.. なので、答えは 1 となりました。
間違いがあったら突っ込みよろしく。
0138デフォルトの名無しさん
2010/07/26(月) 06:13:490139デフォルトの名無しさん
2010/07/26(月) 23:14:402, 4, 1
と割れていますが、こんな時こそRealLibがなんか役立ったりはしないのか?
0140デフォルトの名無しさん
2010/07/26(月) 23:48:55RealLibは1/2^(2^31)より小さい値は
実装上表せないとのことなので、
厳しいかな。
0141質問スレ327
2010/07/27(火) 00:45:44http://namidame.2ch.net/test/read.cgi/kouri/1277488248/327
0142136
2010/07/27(火) 03:46:59scale は小数点以下の有効桁数か。
これを増やしたら = ----.4426... となり、>>127==131 に一致した。
ちなみにscale=1410あれば余裕と思っていたら全然足りてなくて、
scale=1413でぎりぎりといったところだった。
適切な有効精度の見積もりがサッパリわからんので、浮動小数が
必要なシビアな計算は、自分には無理というのがよくわかった。
>>141
それは答えを10^aとおいたときの、aの最上位の桁の数なのでは。
この問題は 10^(7.1881... * 10^1404) の最上位の数を問うている。
0143デフォルトの名無しさん
2010/07/27(火) 11:37:130144デフォルトの名無しさん
2010/07/27(火) 23:55:08floor(a)って関数があったっけな?
そもそもRealLibって、
2+1==3
をやろうとすると無限ループになってフリーズする。
0145デフォルトの名無しさん
2010/11/29(月) 02:00:500146デフォルトの名無しさん
2010/11/29(月) 03:25:440147デフォルトの名無しさん
2010/12/20(月) 06:12:340148デフォルトの名無しさん
2010/12/20(月) 09:44:04そんなあぶなかしいもの使えるかよ!
0149デフォルトの名無しさん
2010/12/21(火) 01:04:200150デフォルトの名無しさん
2010/12/21(火) 04:14:48目の前に大きな穴が空きすぎだよなw
0151デフォルトの名無しさん
2010/12/21(火) 04:17:37Mathematicaは独立した実行ソフトウェアだから全然別物だろう。
RealLibは静的に組み込むことが出来る。ただしライセンスはGNU Lesser General Public License になる。
動的に結合させるだけなら要件を満たせばライセンスは好きにできる。
あとMathematicaはほぼ何でも計算できる。
RealLibは2+1==3をやろうとすると無限ループになってフリーズする。
0152デフォルトの名無しさん
2010/12/21(火) 04:22:52とか設定可能なんだろ?
0153デフォルトの名無しさん
2010/12/21(火) 08:01:58a==bの代わりに
a-b<0.00000001みたいにやる
浮動小数点と違うのは右辺の精度をいくらでも上げられること
つーかそんなに==で無限ループするのが嫌だったらoperator==をオーバーライドしとけ
0154デフォルトの名無しさん
2010/12/21(火) 08:08:340155デフォルトの名無しさん
2010/12/21(火) 08:35:59違う違う。
もしa==bだったらa>bやa<bやa!=bが無限ループになるの。
(違いが見つかるまで小数展開を続けるけど当然いつまでたっても違いは見つからないから)
a-b<0.00000001も、もしa-b==0.00000001だったら無限ループになる。
だから比較演算は絶対に等しくないとわかってるときにしか使えない
0156デフォルトの名無しさん
2010/12/21(火) 08:42:15回避できるケースが出てくるだろうが、それをしないのは
用途的に意味がないから?
0157デフォルトの名無しさん
2010/12/21(火) 14:47:12是非それやってあげて下さい!
LGPLなんで!
0158デフォルトの名無しさん
2010/12/21(火) 15:04:460159デフォルトの名無しさん
2010/12/21(火) 21:34:29いつ使うのかは分からんけど。
0160デフォルトの名無しさん
2010/12/21(火) 21:39:03用が済む用途はそっち使えってことなんじゃないの?
0161デフォルトの名無しさん
2010/12/22(水) 01:12:35無限精度実数ライブラリなんだよ!
0162デフォルトの名無しさん
2010/12/22(水) 04:27:15数式処理ライブラリって世の中に無償じゃ出回ってないよね。
0163デフォルトの名無しさん
2010/12/22(水) 04:31:31重症患者様がまだご存命でいらっしゃるのか。
よくプログラミング出来るよなその低能さで。
0164デフォルトの名無しさん
2010/12/22(水) 06:33:32そんなあぶなかしいもの使えるかよ!
0165デフォルトの名無しさん
2010/12/22(水) 12:27:36既出です!
■ このスレッドは過去ログ倉庫に格納されています