1 :
デフォルトの名無しさん:
イラネ
どのくらい無限なの?
任意の無理数 a と、a と無限小しか違わない数 a' の間にある数を表現できるくらい?
5 :
1:2009/07/21(火) 05:15:20
>>4 > a と無限小しか違わない数 a'
無限小infinitesimalという言葉は数学においては厳密に定義されている物で、
勘や憶測の入る物ではありません。
以下、キースラー公理系を前提にする普通の超実数系で話をしましょう。
まず君の言うことは
st(a') = a
ということですね。
>任意の無理数 a と、a と無限小しか違わない数 a' の間にある数
その様な超実数xは
st(x) = a
ですが、
RealLibはC++用無限精度の「実数」ライブラリですので、
x∈Rでないと当然表せません。
まあ1/2^(2^31)より小さい値は実装上表せないようですが。
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
8 :
デフォルトの名無しさん:2009/07/22(水) 06:43:37
こんなの使わなくたってVW使えばふんがっふんぐっ
VWって何や?
10 :
アイ:2009/07/22(水) 20:59:23
私、天才でしょ?
12 :
デフォルトの名無しさん:2009/07/22(水) 22:06:21
無限精度ならカオスの計算もできそうだな
任意精度でなく無限精度の実数計算が出来る
フリーのライブラリなんてそうそうないよな。
上限が1/2^(2^31)だったとしても。
14 :
デフォルトの名無しさん:2009/07/22(水) 22:29:37
マニュアルを日本語に翻訳してくれれば
読む気になるんですが
・・・ってのは甘えですかね?
15 :
デフォルトの名無しさん:2009/07/23(木) 00:01:36
マニュアルの翻訳は面倒だけど一文ずつ切り出して機械翻訳に掛けて
おかしい所を辞書で直していくしかないな
俺はいつもそうやってる
それが一番早い
無限精度っていうからMathmaticaとかみたいな数学寄りの
ライブラリ想像してたけど違うのかな
まあ数学や研究寄りなんじゃない?
あとMathmaticaはライブラリじゃなくね?
18 :
デフォルトの名無しさん:2009/07/23(木) 08:18:52
このライブラリは、1/3は内部的に
どう保持されるの?何バイト?
19 :
デフォルトの名無しさん:2009/07/23(木) 12:45:48
どうやら1/3とかは式の形のままで保持しているようだ。
そして必要に応じた精度で値を返しているらしい。
だから例えば1/3*3は内部的には1なわけではなく、必要に応じて自動的に必要な精度を定めて1.00000000000000000000000…と返ってくる。
有理数パッケージなんかと違って、べき乗や三角関数や対数とか、
どうがんばっても計算しきれない関数があるから、そういう方法
(内部で元の形を保持)しかないような気がする。
気がする、とか書くとソース嫁とか言われそうだが。
Mathematica みたいなもんだと考えればいいのかな?
それって出力時に計算精度が確定するからそれまで評価を遅延してるだけ?
用途がよくわからんな
いやどんな計算式でも丸めや桁落ちの誤差がでないで
必ず有効桁いっぱいまで精度保証されるって意味なのか…
やっぱりいらね。
演算子オーバーロードのお勉強用かと
バカがバカな考えの中で自己完結して意味ないとか笑えるw
>>20 こういう物は無限ストリーム(遅延ストリーム)で作れば
必要桁まで出して中断したり、その後も継続できたりするよ
ググればLISPとかHaskellとかのコードが出てくると思う
>>21 だからMathmaticaはライブラリじゃなくね?
このRealLibってやつ以外に無限精度ライブラリってある?
経験者とか、比較してみた人とかっていない??
>>30 だってライブラリとライブラリじゃないものを
誤って比較しようとしている人がいたら
全然別物だよ?
って注意してあげるべきでは?
お前の類似性判断基準はライブラリかそうでないかしかないのかw
けどなんなんだよ
まあそう煽るな。
ライブラリでないものはライブラリでないと見抜ける人でないと(C++を使うのは)難しい
ってことを伝えたかっただけだ。
シンプレックス法とかの吐き出し法アルゴは
誤差に弱いし、超越関数使ってないし、効果すぐ出そうだよね。
ちょっと試してみようかな。
、、と思ったけど、入力パラメータが実数な時点で
既に誤差ってるんだった。
FPUとSIMD-FPの代わりに、こいつをHWインプリメントとか
出来んもんかね。
Real(0.1) → 誤差あり
Real("0.1") → 誤差なし
か。なるほど。
「アルゴ」と略すと頭悪そうに見える件
>>37 Real(0.1) → 誤差あり
Real("0.1") → 誤差なし
Real(1.5) → 誤差なし
Real("1.5") → 誤差なし
ふーん。なるほど。
40 :
デフォルトの名無しさん:2009/07/25(土) 10:17:40
rとr'が完全に等しい時、
比較演算子==で比較すると無限ループするという仕様は
ちょっと悲しい。
妥協する方法はないのだろうか?
アルゴ君ネタはもういいよ
>>40 解析的に等しいかどうかのチェックはやっぱ難しいのかね
しかし時間は有限なので
結局処理に充てられる時間の都合上有限精度
無限精度であることは唯の一度も無い!
>>19 expression templateみたいなものか。
45 :
デフォルトの名無しさん:2009/07/25(土) 12:05:15
>>43 そんな誰もが解り切っていることを言わなくても。
そもそも
>>6によれば実装上の限界が定まっているらしいじゃないか。
1/2^2147483648 まで表現できれば十分・・・とは言えない場合ってどんなんだろう
47 :
デフォルトの名無しさん:2009/07/25(土) 12:50:14
sqrt(2)とかを求めたらメモリーを使い切ってcoredumpってこと?
sqrt(2) を sqrt(2) のまま扱う
有効桁数を指定して表示させることもできる
という Mathematica と同じようなことをしてると思われ
49 :
デフォルトの名無しさん:2009/07/25(土) 12:58:01
じゃあ対数を多用する計算でも誤差伝搬を無くせるの?
複素数は無理なのか
しかし sqrt(2) == sqrt(2) は無限ループ!
数桁比較して等しければ
解析的に等しいかどうかチェックした方がいいんだろうけど、
Mathematica でもこのあたり完璧にできるの?
等価な式を引き算して simplify したら 0 になるとか
54 :
デフォルトの名無しさん:2009/07/26(日) 00:26:40
Mathematicaと区別つかないやつ大杉
じゃあどこが違うんだよ
ライブラリかどうかとか言ったら嗤うぞw
>>55 1. ライブラリかどうかも「当然」違うけど
2. 文字処理なども違うだろ?
3. 制作者も違えば
4. ライセンスも違う。
5. 普及率も違う。
むしろどこが同じなの?
つまらん
「アキレスと亀」をデモしてくれるんなら、使ってみる。
アキレスと亀って、要はフラクタルでしょ
マンデルブローの拡大デモにアキレスと亀のスプライトを入れれば完成
パラドックスライブラリでも作るか
62 :
デフォルトの名無しさん:2009/07/27(月) 21:48:30
無限精度なんてあるんだ。
面白いな。
いつ使うのか知らないけど。
もちろんベンチマークする時に決まってるじゃん
64 :
デフォルトの名無しさん:2009/07/28(火) 07:06:35
アキレスの亀の本質は
負ける前に時間を停めればその時刻までは負けてない
65 :
デフォルトの名無しさん:2009/07/28(火) 10:35:06
そんなくだらない本質を語らなくても。
RealLibについて語るしかなかろう。
おれの用途にはこれくらいの精度で十二分だなあ。
速度はどの程度でるんだろうか。
ちなみに「無限」とか言わずに、精度10^x倍ライブラリ、とした方が
関心持つやつが増えると思うよ>開発者
.dk で開発されてるライブラリについてここでアドバイスしても
届くわけねーだろ
.dkって
デンマーク?
ドナルド・クヌース
諸君、話題は無いのかね?
71 :
デフォルトの名無しさん:2009/07/31(金) 18:56:38
無いっすねぇ(>_<)
72 :
デフォルトの名無しさん:2009/08/02(日) 23:54:59
誰かタメになる話題をplz
73 :
名無しさん:2009/08/04(火) 04:45:52
「精度保証付き数値計算」でググれ
ググってみた。
面白そうだが、
精度保証付き数値計算 C++ライブラリ
でググってもライブラリが見つからん。
75 :
デフォルトの名無しさん:2009/08/09(日) 12:11:36
boostの有理数ライブラリと比べてどうかな?
あっちは除算によるまるめ誤差は出ないんだっけか?
76 :
74:2009/08/09(日) 12:15:56
>>75 有理数ライブラリは有理数演算用で、
小数計算には役立たない。
例えばπとかには完全に無力。
77 :
デフォルトの名無しさん:2009/08/11(火) 16:00:41
保守
78 :
名無しさん:2009/08/12(水) 18:49:46
>>74 特定のライブラリではない汎用の方法がある。
条件は:
(1)IEEE-754をサポートしている
(2)対象とする計算が線形である
アセンブラかC/C++のインラインアセンブリで、丸め方法を捜査する。
(答え) = {(全部切り上げで計算した結果)+(全部切り下げで計算した結果)} / 2
(精度) = ABS{(全部切り上げで計算した結果)ー(全部切り下げで計算した結果)}
>>78 ありがとう。
でも線形であるって相当厳しい要求じゃないか?
sinどころか累乗が出てきただけで死ぬっしょ?
適当に線形化したら…
やっぱだめか
81 :
名無しさん:2009/08/12(水) 21:29:30
CORDICとかはあかんね
でも、累乗は何とかなるかも
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]'
82 :
デフォルトの名無しさん:2009/08/15(土) 13:16:19
あげあげ
83 :
デフォルトの名無しさん:2009/08/21(金) 00:31:20
保守
84 :
名無しさん@そうだ選挙に行こう:2009/08/30(日) 07:50:30
保守
85 :
デフォルトの名無しさん:2009/09/13(日) 20:35:53
このスレ落ちそうだな。
86 :
デフォルトの名無しさん:2009/09/17(木) 14:43:39
ひょっとしてエントロピーの計算しまくり
の時キラーケース?
ちゃんとガチの多倍長にも対応したら面白いんだろうけどなぁ
むしろそっちだけあればいい俺もいるが
>>87 boost::bigintがいるじゃないか。
いればいいんだけどなぁ…
90 :
デフォルトの名無しさん:2009/09/19(土) 00:18:04
>>53 完璧な(どんな2数に対しても汎用的に行える)等値判定は
アルゴリズムと計算時間が有限である限り不可能であることが証明されている
(チューリング機械の停止判定と同値になる)
有理数の式の複合同士として比較すりゃいいんだろうが、手間で死ぬる。
>>92 いや、必ずしも有理数とは限らないでしょ。
どうしても無限和や無限積の形にしないと表せない数がある(たとえばπ)
そういう数を比較するには一般には無限に小数展開を続けるしかないから
有限の手続きでは等しいことの確認ができない。
特別なケース(有理数同士とか)に限れば等しいことを確認できる場合もあるけど。
ちなみに任意の計算可能実数が有理数かどうかを判定する手続きも一般
には存在しない。仮にそういう手続きが存在すると仮定すると、それを使って
任意の計算可能実数が等しいかどうか判定する手続きを構成できてしまう。
πやeとかの超越数は、別個に印つけときゃ良いだろ。
それにこれはもともと無限精度じゃないし。
>>95 ルールを追加することで(πと有理数は決して等しくならないとか)
そういう特定の数だけは比較できるようになるけど、
「任意の」二数を比較できるようにするには無限のルールを追加する必要があるので、
結局有限の手続きでは比較できない。
> それにこれはもともと無限精度じゃないし。
どういう意味? 無限精度というのは通常「その気になればどこまでも精度を
上げられる」という意味で定義される。本当に無限の桁数を求めるには無限の
時間と記憶容量が必要だから当たり前だけど。
このライブラリはそういう意味で無限精度。
>>6の制限は単に高速化のための
実装上の都合に過ぎない。
あと印付けるにはそもそもその数がπやeかどうか判定する必要があるけど、
任意の計算可能実数が有理数かどうかを判定する手続きも(有理数の判定と同様)
存在しない。
× 任意の計算可能実数が有理数かどうかを判定する手続きも
○ 任意の計算可能実数がπかどうかを判定する手続きも
呼んだ?
幾つかの演算がπを表すことを覚えさせときゃ、実用上はさほど問題なくないか。
101 :
デフォルトの名無しさん:2009/11/01(日) 20:49:50
>>100 何をおっしゃりたいの?
・・・ってああ、もしかして2*asin(1)とかのこと?
でもasin()の引数に相当する所が
本当に1かどうかを判定する手続きも以下同文
あらかじめ答えがわかってる演算は
あらためて計算する必要すらない
幾つかの演算が1を表すことを覚えさせときゃ、(ry
>>103 そして無限ループへ・・・
さらに幾つかの演算が2を表すことを覚えさせとかなきゃならないこともお忘れ無く。
四則演算で畳み込めるだろう。
すると今度は四則演算の結果が有理数になるかどうかを覚えさせる必要があるのではないか
Maximaとかの数式ソフトとかと同じなんだろ。
あーだのこーだの難癖つけても意味無いよ。
>>107 任意の数式ソフトにケチをつける手続きも一般には存在しない。仮にそういう(ry
109 :
デフォルトの名無しさん:2009/11/19(木) 18:20:32
保守
110 :
デフォルトの名無しさん:2010/01/17(日) 20:39:22
linuxでうまく動かなかった。Windowsだと動いた。
112 :
デフォルトの名無しさん:2010/02/17(水) 22:38:26
linuxでうまく動かなかったのか。
そんなんで良いのか。
でもこれ意外に無償で使える無限精度ライブラリって
ないもんなぁ。
・・・無いよね??
無限の精度を必要とする計算なら、たとえこの無限精度ライブラリでも対応出来ず
有限に切り詰めなきゃならないし、そうすると既存の浮動小数点と変わりない。
結局のところ使い道がない。
任意精度ライブラリという観点からも、double精度以上必要なケースがそれほどあるのか疑問。
誤差が波及しないというメリットならあるぜ。
でもそれが必要な状況があるかどうかはまた別の話だが。
死亡回避sage
用途無いよね
5^2010 の最上位の桁の数字は何か?
を解く時くらいしか用途ないよね。
>>116 バカかお前は。
このライブラリはその問題を解けない。
上限が実は結構低いんだ。
そういう用途はbignumライブラリだね
Real変数から小数部を得るにはどうしますか?
実践的でないライブラリは屑だ!
>>116 > 5^2010 の最上位の桁の数字は何か?
8 かな?
ならば
7^(5^2010)
ではどうだ。今度は計算できまい。
7.36171328... * 10^2733 かな?
126 :
123:2010/07/23(金) 20:04:44
計算できねぇww
どうすりゃいいんだ。
って最上位の桁だけ見るって入試問題があったなそういや!
>>125 俺の理論によると最上位は2となったのだが
A = 10^a = 7^(5^2010)
a = (5^2010) * ln(7)/ln(10) = ----.67182...
よって A = 4.69... × 10^(7.1... × 10^1404)
>>128 バカな私にはわかりません!
10^(7.1... × 10^1404)
の部分がかならず10の累乗なの?
つまり(7.1... × 10^1404)が必ず整数なの?
そそそ、そうだぞ!
7.1... × 10^1404が自然数である事を証明しないと
4.69... の括りだしなんか意味が無い筈だぞ!だぞ!
131 :
127:2010/07/25(日) 07:23:28
>>128 a = ----.4426...
じゃね?
んで
log 2 < 0.4426 < log 3 (底は10)
だから最上位の数字は2じゃね?
132 :
128:2010/07/25(日) 07:47:59
糞笑えることに有効数字が足りてなかった。
...598.4425764...
>>131が正しい
誰かもっと分かりやすく説明してくれ。
a = ----.4426...
ってのはどうやって算出したの?
その有効数字が正しいことはどうやって計算したの?
bc -l
>>124 対数なんぞ受験の時以来でもうすっかり追憶の彼方なんだが、
計算機叩きながらどうにかやってみた。
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^)/
>>135 bc て計算機なのな。
でかい数字が扱えるみたいだから試してみよう。
常用対数が使えないので、まず自然対数にする。
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 となりました。
間違いがあったら突っ込みよろしく。
scale=2000
答えが
2, 4, 1
と割れていますが、こんな時こそRealLibがなんか役立ったりはしないのか?
140 :
デフォルトの名無しさん:2010/07/26(月) 23:48:55
RealLibが活躍できるように対数の対数をとって…と思ったが、
RealLibは1/2^(2^31)より小さい値は
実装上表せないとのことなので、
厳しいかな。
141 :
質問スレ327:2010/07/27(火) 00:45:44
142 :
136:2010/07/27(火) 03:46:59
>>138 scale は小数点以下の有効桁数か。
これを増やしたら = ----.4426... となり、
>>127==131 に一致した。
ちなみにscale=1410あれば余裕と思っていたら全然足りてなくて、
scale=1413でぎりぎりといったところだった。
適切な有効精度の見積もりがサッパリわからんので、浮動小数が
必要なシビアな計算は、自分には無理というのがよくわかった。
>>141 それは答えを10^aとおいたときの、aの最上位の桁の数なのでは。
この問題は 10^(7.1881... * 10^1404) の最上位の数を問うている。
で問題の a - floor(a) の計算にRealLibは使える?
>>143 floor(a)って関数があったっけな?
そもそもRealLibって、
2+1==3
をやろうとすると無限ループになってフリーズする。
145 :
デフォルトの名無しさん:2010/11/29(月) 02:00:50
結局 Mathematica みたいなもんだと考えればいいのかな?
MathematicaをCから呼んだりするより速いんじゃない?たぶん
147 :
デフォルトの名無しさん:2010/12/20(月) 06:12:34
RealLibは死滅しちゃうの?
チューリング完全ならどんな言語だって停止性の保証なんかできないんだぜ
>>145 Mathematicaは独立した実行ソフトウェアだから全然別物だろう。
RealLibは静的に組み込むことが出来る。ただしライセンスはGNU Lesser General Public License になる。
動的に結合させるだけなら要件を満たせばライセンスは好きにできる。
あとMathematicaはほぼ何でも計算できる。
RealLibは2+1==3をやろうとすると無限ループになってフリーズする。
勿論精度設定して第何位まで一致なら一致とみなして良い
とか設定可能なんだろ?
設定可能というか
a==bの代わりに
a-b<0.00000001みたいにやる
浮動小数点と違うのは右辺の精度をいくらでも上げられること
つーかそんなに==で無限ループするのが嫌だったらoperator==をオーバーライドしとけ
なんだ、operator==は最初から提供されてないじゃん
>>153-154 違う違う。
もしa==bだったらa>bやa<bやa!=bが無限ループになるの。
(違いが見つかるまで小数展開を続けるけど当然いつまでたっても違いは見つからないから)
a-b<0.00000001も、もしa-b==0.00000001だったら無限ループになる。
だから比較演算は絶対に等しくないとわかってるときにしか使えない
無限ループは整数型も追加すれば
回避できるケースが出てくるだろうが、それをしないのは
用途的に意味がないから?
>>156 是非それやってあげて下さい!
LGPLなんで!
ページ見ると高速を謳っているから余計なものつけんのだろうね
つまり常人が予想するような用途じゃないのか。
いつ使うのかは分からんけど。
(有理数とか)正確数を扱うライブラリは他にあるから、そういうので
用が済む用途はそっち使えってことなんじゃないの?
数式処理ライブラリじゃなくて
無限精度実数ライブラリなんだよ!
>>161 数式処理ライブラリって世の中に無償じゃ出回ってないよね。
Mathematicaと区別つかない(=ライブラリとライブラリじゃないものの区別が付かない)
重症患者様がまだご存命でいらっしゃるのか。
よくプログラミング出来るよなその低能さで。
164 :
デフォルトの名無しさん:2010/12/22(水) 06:33:32