[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 10/10 17:38 / Filesize : 123 KB / Number-of Response : 462
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【FPU】 浮動小数点 【SSE】



1 名前:デフォルトの名無しさん [2008/01/04(金) 14:25:44 ]
主にx86系で浮動小数点を扱う話題

193 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 01:41:53 ]
>>188
あんま無いよ、どうせやるなら同次型にして取り扱うが吉
速くて誤差なし

194 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 03:16:49 ]
>>178
おまえw 気をつけろw >>177のいう事信じるなwww
ちょっとでも数値計算したことあれば、言ってることが嘘だと分かる。

確かに単精度で表される最小数値は10^-37程度だが、有効桁は仮数部できまるので
1程度の量と混ぜたら、単精度では10^-7程度の誤差が出る。

小学生的なイメージで言えば、浮動小数点では数直線を対数的にメッシュで切っているので、
0近辺では目が細かくて10^-37程度だが、1の近辺では目が粗くなっていて10^-7程度でメッシュが
切られている。だから、これ以上細かい数値を足し引きしても、近場のメッシュに寄せられてしまうので
(寄せ方は切り上げ切捨て、四捨五入(しかも色々ある)などIEEE745の規格で決まった寄せ方を
フラグで指定してやれる。SSEとかはこの辺をきちんとやってない。)
1近辺では10^-7以下の数値は意味を持たない。

これは、浮動小数点をよく知らぬまま数値計算をやっていても、結果を吟味する段階で必ず出会うことなので、
浮動小数点の仕組みを知らなくても、単精度は10^-7~8、倍精度は10^-14~15などという事は、嫌でも体で覚える。

この点からして、>>177は計算しない素人評論家もしくはアホ。相手にするな。


195 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 05:12:11 ]
なんかこのスレグダグダすぎてワロタ。

196 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:03:42 ]
>194
>確かに単精度で表される最小数値は10^-37程度だが、有効桁は仮数部できまるので
>1程度の量と混ぜたら、単精度では10^-7程度の誤差が出る。

出ねーよwww
1 に 10^-37 足したら誤差が 0.0000001 ってどこの電卓だよ! ハライテー

>0近辺では目が細かくて10^-37程度だが、

正規数オンリーでも10^-43(≒2^-149)ぐらい楽勝だろうが。
あのさぁ、最小値=最小の刻み幅とか勘違いしてない?

>この点からして、>>177は計算しない素人評論家もしくはアホ。相手にするな。

「1〜10^-37ぐらいを同じ精度で計算するのは朝飯前」
被加数:1.000000 (精度7桁)
 加数:1.000000 * 10^-37 (精度7桁)
 合計:1.000000 (精度7桁)

何か問題あるわけ?


197 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:10:37 ]
[悪い例]
float温度[℃]に 3 << 22 を加えた後、3 << 22を引けば整数化される。
1 << 23個の1円玉(約1g)のfloat重さを加算した後で平均をとる。

>>おでんや
x87CWのUM,DMをセットするか例外ハンドラをつけるべき

198 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:31:53 ]
>>196
その加算で精度7ケタに丸められることを
194は10^-7程度の誤差と言っているのでは?

199 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 15:05:15 ]
>194
そんなレベルの議論は>181>183で終わっているように見える
>196
0.5ulpの意味でベストを尽くすこととそれに意味があるかどうか
ということは別の問題だ
1と1+10^-8を区別できない状況で誤差が10^-37程度だなんて
主張したかったらもっと筋道立てて説明しろ
あと
>「1〜10^-37ぐらいを同じ精度で計算するのは朝飯前」
の意味をもう少し具体的に書け
どんな元データからどういう計算をしようとしてるのかを

200 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 16:25:41 ]
もし次スレが立つ様ならスレタイにくだすれって入れとけよ

201 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:26:37 ]
>>191
10進数で1/3=0.3333333333…は3進数では0.1だ。




202 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:17:18 ]
>>196
誤差を理解してないな。

203 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:28:01 ]
>よくわからないけど、 1.0 + 1.0 * 10^-37 が正確に計算できるってこと?

「よくわからない」ふりして指数域の問題に見せかけつつさりげなく循環小数を忍ばせてIEEE陣営の内ゲバを狙う>>178よ…恐ろしい奴だ。BCD陣営の刺客か?俺も釣られるところだったぜ…

>1 に 10^-37 足したら誤差が 0.0000001 ってどこの電卓だよ! ハライテー

>>196よ、知恵を付けた>>194が「round toward +INFINITYモードだい!」と屁理屈こねて反撃してくる可能性に気をつけろ。0.5ulpの威光も吹っ飛ぶぜ。

>>「1〜10^-37ぐらいを同じ精度で計算するのは朝飯前」
>の意味をもう少し具体的に書け
>どんな元データからどういう計算をしようとしてるのかを

じいさんはそれを>>157に確認してる最中なんじゃねぇの?
このスレの迷走っぷりに呆れて157ももう戻ってこないんじゃないかと。

> 例えば 1 前後のオーダーが普通な時に
> 10^-14 みたいなサイズのベクトルがあったら
> それは多分もの凄い勢いで数値誤差を含んでる。

俺もなぜこの程度の指数域で精度不信に陥ったのか事情を知りたい。


204 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:32:18 ]
想像だけど、計測値を補間する場合はそんなことが起きる。
回転しないはずなのに微量の回転とか。

205 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:34:18 ]
もうそろそろネタがつきる頃だな。

206 名前:デフォルトの名無しさん [2008/02/21(木) 22:40:47 ]
>>196
馬鹿はすっこんでろw
さらしage

207 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:54:54 ]
>>203
機械εが10^-16前後だから
1 前後の値を数百数千数万数十万といった加減算をやってりゃ
10^-14 程度の数値誤差はあって当然。

208 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:55:19 ]
倍精度での話な。

209 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:17:21 ]
>>196
あのさぁー
あんた誤差とか有効桁の意味分かってないだろ?

>正規数オンリーでも10^-43(≒2^-149)ぐらい楽勝だろうが。
あのさーwww
あんたさー正規数と非正規数の違い分かってないだろ。

あのさぁーwwww
実地で数値計算をしていれば最小値とか誤差ぐらい誰でも知ってることだよ。
あんた、ただ規格ちょっとかじり読んで得意になってるだけのおっちょこちょいのトーシロさん?


>「1〜10^-37ぐらいを同じ精度で計算するのは朝飯前」
>被加数:1.000000 (精度7桁)
> 加数:1.000000 * 10^-37 (精度7桁)
> 合計:1.000000 (精度7桁)

>何か問題あるわけ?

あのさぁーwwwwwwwwwwwwwwwww
> 2008/02/21(木) 13:03:42
ひょっとして、あんた昼間っから酒飲んで酔っ払ってない?
まさか素面で真面目に書いてないよね?


>>203
>>196の自演?pupupu




210 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:21:16 ]
自称データマイニング屋のせいで糞スレ化してしまったな。

211 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:36:09 ]
>>210
>>4の呪いだ.




212 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:40:08 ]
的確すぎて泣けた

213 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:23:33 ]
ここまで全部 >>4 による自作自演なんじゃないかと思えるほどぴったりだな。

214 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:26:28 ]
誤差はちゃんと高校で教えるはずなのに
まともに教える学校が少ないのかな。
俺も大学の物理実験ではじめてまともにやったよ。

215 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:44:23 ]
判りやすく仮数部は2進表記な。

最小の単精度正規数
1.00000000000000000000000 × 2^(-126)

次に小さな単精度正規数
1.00000000000000000000001 × 2^(-126)

その差
0.00000000000000000000001 × 2^(-126)

差を正規化して
1.0 × 2^(-149) ≒ 1.4 × 10^(-45)

奇しくもこれって非正規数の最小値と一致するのな。
>>209 はその辺読み違えたのかと。だよな?


さて、>>194 (= >>209 ?) の番だよ。

>0近辺では目が細かくて10^-37程度だが、
>1の近辺では目が粗くなっていて10^-7程度でメッシュが切られている。

10^-37 の算出根拠を示してください。


216 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:35:23 ]
>>207
> 10^-14 程度の数値誤差はあって当然。
「誤差が10^-14」ってどこから出てきた話よ。

> 10^-14 みたいなサイズのベクトル
の要素の誤差が10^-14なのか?もしそうならこれはひどすぎる。


217 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 02:19:10 ]
>>215
それは評判の悪い漸次的アンダーフローの場合だろwwwww

その2数で差を取ったら非正規数になり結局0.0になる。
実際には10^-45という非正規数は見ることは無いんだよ。

大体これは実際に数値計算をしていれば分かること。
プログラム動かして、IEEE754単精度で1.0e-45だのの数字を見たことあるかよ?



要するに、お前がやってるのは、布団海水浴なんだよ。布団の上で水泳ごっこしてるのと同じなんだよ!
規格だけ見てワーワー言ってるから、頓珍漢なことを言うんだ。
2chで遊んでないで、ちゃんとプログラム組んで計算しろ!


218 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 02:59:57 ]
おや、これはなんだろう。
--
awk 'END {printf("%c%c%c%c", 1, 0, 0, 0);}'|od -t f4
--
私にはIEE754単精度の約1.4e-45に見えるのだが。

219 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 07:25:57 ]
>>216
> > 10^-14 程度の数値誤差はあって当然。
> 「誤差が10^-14」ってどこから出てきた話よ。
常に O(1) の値を扱って、
それらが全て循環小数なり無限小数なりなら、
100 回の加減算で誤差は機械εの 100 倍のオーダー、
つまり O(10^-14) になる。
しかし実際には、
常に循環小数なり無限小数なりにならないかもしれないし、
常に O(1) ってことはないかもしれないし、
実践的には O(10^-14) ということはないかもしれない。
もっと早く O(10^-14) に達するかもしれないし、
もっと遅く O(10^-14) に達するかもしれない。

> 10^-14 みたいなサイズのベクトル
そんな感じの計算をそんくらいの回数だけ計算をした場合、
10^-14 は数値誤差と同程度のオーダーのベクトルだから、
1桁目にも数値誤差がてんこもりの恐れがあるってことだ。
実際、そういう感じの計算を行った場合、
O(10^-14) のベクトルの向きは当てにならない。

220 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 07:27:03 ]
× 10^-14 は数値誤差と同程度のオーダーのベクトルだから、
○ O(10^-14) のベクトルは数値誤差と同程度のオーダーのベクトルだから、

221 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:45:07 ]
で、結局、IEEE754単精度正規数の最小ステップ長は誰が正しいんだよ。

・10^-37程度
・10^-43ぐらい楽勝
・≒1.4*10^-45




222 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:12:59 ]
>>218
ワロタw それは非正規数だしwww 弁当まじりの茶吹いたwwwww
odのf4フォーマットは非正規数をベタで出せてよかったねwww
えらいえらい見えた!見えた!




単精度実数での数値計算の誤差を踏まえた話をしてるんじゃ無かったのかよ。
好きなビット列と好きな浮動小数点フォーマットでへんちくりんな数を出して遊んでるなら、
次はIBMの16進形式で頼むわwwww


”あのさぁー”wwwwww
0.0の次の正規数は約10^-38で、この間隔の方が現実の数値誤差には重要なんですよぉー。
実地であらわれるコンテキスト上の意味も分からないまま、フォーマット規約だけを見て自慰行為に
ふけりまくってるオナニー猿には関係ないだろうがなw




223 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:35:16 ]
>>221
単独で取り出せる正の数の最小値はおおよそ1e-38。
一般的に原点近傍の数値間隔といえばこれを指すと思う。

ただ仮数部の桁が7~8桁あるので、その上近傍で仮数部の一番下の桁を見れば
1e-7~8 * 1e-38 = 1e-45 程度の丸め誤差におさまっている。

224 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:13:39 ]
>222
>0.0の次の正規数は約10^-38で、この間隔の方が現実の数値誤差には重要なんですよぉー。
どういう意味で?どこの現実で?
非正規化数が定義された意味をきちんと勉強しろ。
非正規化数がないとか演算速度が重要な実地ならそう書け。

>223
非正規化数って聞いたことない?
聞いたことのない単語が出てきたらググって調べない?

225 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:35:36 ]
あるのは分かっているし、なくなってしまえばいいとも思わないけど、
実際のところ、あっても嬉しくない。

226 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 16:03:15 ]
> 0.0の次の正規数は約10^-38で、この間隔の方が現実の数値誤差には重要なんですよぉー。
「実地であらわれるコンテキストw」の提示内容によっては同意してもいいぜw。

だがしかし、>>194の抱く「小学生のイメージ」像に矯正が必要な件はこれとは別だぜwww。


227 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 18:17:34 ]
>>219
俺にも詳しく。具体例で。

・O(1)のベクトルA:(1.2, 2.3) ※ いずれの要素も有効桁16
・O(10^-14)のベクトルB:(1.1e-14, 4.5e-14) ※ いずれの要素も有効桁16
があったとしよう。この時点でBの単位ベクトルを求めても文句ないよな?

  ↓
ベクトルAでもの凄い計算
  ↓

・ベクトルA':(2.46...1, 3.96...7) ※ 有効桁14に減少
・ベクトルB:(1.1e-14, 4.5e-14) ※ やっぱり有効桁16

ここまではいいんだよな?

さてと、ここから「O(10^-14)で有効桁1のベクトルC」が登場するまでのシナリオが思いうかばねぇ。
> O(10^-14) のベクトルは数値誤差と同程度のオーダーのベクトルだから、
> 1桁目にも数値誤差がてんこもりの恐れがあるってことだ。
てのはそういうことだよな?

あるいは既にベクトルA'の一部に、O(10^-14)で有効桁14な要素が出現してたりするのか?…

とりあえず全ベクトルの全要素は同じ単位の比例尺度で、ベクトル間要素間の加減乗除何でもアリというシナリオルールにしておこう。温度計(間隔尺度シバリ)の話はとりあえず後回しだ。


228 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 19:06:37 ]
>>227
O(1) の近い値のベクトル同士を減算すれば
おもっくそ桁落ちする。

229 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 20:09:05 ]
こういうことか。

・O(1)のベクトルA1:(1.2, 2.3) ※ 有効桁16
・O(1)のベクトルA2:(2.6, 3.1) ※ 有効桁16

  ↓
ベクトルA1,A2でもの凄い計算
  ↓

・ベクトルA1':(2.46...1, 3.96...7) ※ 有効桁14
・ベクトルA2':(2.46...2, 3.96...6) ※ 有効桁14

  ↓
ベクトル C=A1'-A2' を計算。
  ↓

・ベクトルC:(-1e-13, 1e-13) ※ 有効桁1

・ベクトルCの単位ベクトル:(-1, 1) ※ 有効桁1以下w


230 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 20:12:04 ]
実際数値計算やってたらそういう状況は起こる。
たとえば基底関数展開したベクトル関数の
ある点の値を取得しようとすると、
対称性のおかげで0ベクトルになる点やその付近で
そういう状況に陥ることがある。

231 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 20:17:46 ]
>単位ベクトル:(-1, 1)

1/sqrt(2)の間違いな。




232 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 23:29:03 ]
>>224
おまえと>>229は別人なのか、同一人物の自演なのか?www二匹も馬鹿が釣れたのか。
非正規化数の定義された意味を勉強するのはお前のほうだ。
Kahanのサイトに行って、70年代からの苦労話を読み直して来い!
非正規化数を正規化数と同じに考えているところからして、お前は根本から間違っているんだよ。

大体ようやくここ10年くらいでIEEE754の数値Formatは普及したが、丸めやら非正規化数の扱いなんかを
完全準拠している処理系はむしろ例外的だろ。
CELL(SPE)とかGPUの類も非正規化数とかまともにやってないだろ。
SunのSPARCも対応していなくてソフトウェアで対応してたろが。
(この辺は、記憶が曖昧だから検証はマニアさんに任せるよw)

さて、数直線のイメージが理解できないようだから、幼稚園児にも分かるようにより程度を下げて
説明してやる。感謝しろ。

浮動小数点の正規数は、おおよそ対数メッシュになっている。これは指数部に拠るものである。
これは定規で長い線で引かれている目盛りのようなものだ。
さらにこの対数目盛りの間に細かい目盛りが等間隔で引かれている。これは仮数部によるものだ。

0近傍を見ると、最小の正規数までの間には正規数の細かい目盛りは無い。空白地帯がある。
IEEE754規格はここに非正規数を置いているが、この部分は処理系に依存するので、
浮動小数点を学び始めた人は正規数のみのイメージを作るほうが適切だ。
それに、そもそも話は正規数の範囲だったしな。

>>229
お前は桁落ちも知らないで浮動小数点に粘着しているのかwwwwww
subnormalなnumberをいじるより、そのsubnormalなお前の知性を何とかしろ。

俗人のくせに神学に興味を示すのは狂気のプレリュードというが、
数値計算もしないのに浮動小数点にこだわるのも同じだな。abnormalだ。
まず味噌汁で顔を洗って、伊理正夫の数値計算の常識を百回読み返すまでROMってろ!


233 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 00:26:17 ]
wwwまで読んだ

234 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 01:11:46 ]
>>229
>お前は桁落ちも知らないで浮動小数点に粘着しているのかwwwwww

ん?この桁落ち、間違ってるのか?
>>228か?何か気分害したか?直すぞ。
16桁BCDで説明し直すか?

>subnormalなnumberをいじるより、そのsubnormalなお前の知性を何とかしろ。

1e-13ってsubnormalなのか?あ、これ、倍精度な。


235 名前:228 mailto:sage [2008/02/23(土) 01:14:16 ]
違うわい。俺はこんな煽りはしない。

桁落ちは合ってるが、桁落ちを今知ったような、
あるいは桁落ち誤差が完全に頭から抜け落ちていたような
雰囲気に対して煽ってるんだろう。

236 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 01:57:14 ]
>大体ようやくここ10年くらいでIEEE754の数値Formatは普及したが、丸めやら非正規化数の扱いなんかを
>完全準拠している処理系はむしろ例外的だろ。
何いきなり抱き合わせで完全準拠を求めてんですか。
そんなに価値がないのならIEEE754rで削除してもらうか。

>SunのSPARCも対応していなくてソフトウェアで対応してたろが。
プログラマならまずシステムとして対応しているか&使い物に
なるかを気にするべきでハード実装かどうかはそのあとでしょ?

>浮動小数点を学び始めた人は正規数のみのイメージを作るほうが適切だ。
同意

>それに、そもそも話は正規数の範囲だったしな。
そうだっけ?

>subnormal
まで読んだ


237 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 03:57:16 ]
非正規化数になんか恨みでもあるんだろうか。

238 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:45:05 ]
subnormalってなんだろうと思ってたが、
サブプライムとかけてたのね。

ふーん

239 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:23:18 ]
>>232
>幼稚園児にも分かるようにより程度を下げて
>説明してやる。感謝しろ。

ご協力感謝します。>>194も喜んでおります。

>浮動小数点の正規数は、おおよそ対数メッシュになっている。
>これは指数部に拠るものである。

ふむふむ、すると「対数メッシュ」の間隔は最小値近辺で大体10^-38、1付近で大体10^0ですね。

>さらにこの対数目盛りの間に細かい目盛りが等間隔で引かれている。
>これは仮数部によるものだ。

ふむふむ、すると「細かい目盛り」の間隔は最小値近辺で大体10^-45、1付近で大体10^-7ですね。

さて、>>232さん、ここでご指導を仰ぎたいのですが、

>>194
>0近辺では目が細かくて10^-37程度だが、
>1の近辺では目が粗くなっていて10^-7程度でメッシュが切られている。

の申す「メッシュw」とやらはどちらに分類しましょう。
「対数メッシュ」?「細かい目盛り」?
「これ以上細かい数値を足し引きしても、近場のメッシュに寄せられてしまう」
とか申しておりますので「細かい目盛り」にしましょうか。

ということで>>194君、「10^-37」には修正が必要だよ。

はい、本日の「小学生のイメージ」矯正終了。


240 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:23:13 ]
循環小数に適当な基数変換を施すと有限小数になる場合があるけど、
これって常に可能なんだっけ?
(任意の循環小数には有限小数に変換できるような基数が必ず存在する?)

もしかして有理数 m/n として表されるなら n を基数にすればいいとかそんな感じかな?
n が素数でない場合はもうちょい工夫できそうな?

241 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:09:21 ]
悲しいことに全ての有限小数は循環小数なんだな。
89.999… == 90.0 == 90.000…




242 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 09:56:03 ]
丸めると 90.0 になるから問題ない

243 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 09:59:20 ]
>もしかして有理数 m/n として表されるなら n を基数にすればいいとかそんな感じかな?
・有理数 m/n は n**-1 のm倍
・有限桁o進数は o**p の整数倍(pは有限の整数)
・mは整数かつ-1は有限の整数なので、m/n は有限桁n進数で表現可能

>n が素数でない場合はもうちょい工夫できそうな?
・(n*x == o**y)を満たす整数x,yが存在するならoは何でも良い


244 名前:デフォルトの名無しさん [2008/02/24(日) 10:59:08 ]
>>240
そこまで言ってたらわかってると思うが、m/n = 0.m (n進数)だろーがw

245 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:02:55 ]
[m/n].(m-n[m/n]) だな。

246 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:05:11 ]
>>244
143/7 は 0.143(7進数)ですかそうですか


247 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:11:07 ]
>>240
n 進数で 0.a...b a...b a...b ... という循環小数があった場合、
0.a...b a...b a...b ... = a...b * 0.0...1 0...1 0...1 ... となる。
0.0...1 0...1 0...1 ... を (n-1)...(n-1) 倍すると 1 になるので、
0.a...b a...b a...b ... = a...b / (n-1)...(n-1)

だな。

248 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:28:09 ]
逆に、整数で割りきれないと必ず循環小数になるんだよな。
余りのパターンには限りがあるから、
少なくとも 0 以外の全ての余りが出現したら
あとは循環するのみだから。

そう考えると、1/素数はかならず循環小数になる以上、
素数 p は必ず何らかの (n-1)...(n-1) の約数になるのか。
なんか面白いな。

249 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:29:18 ]
>>240
すべての循環小数は有理数

すべての有理数はp/qの整数比で表せる

すべての循環小数は基数変換で(ry

250 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:34:10 ]
1/素数はかならず循環小数になる以上

1/2

1/5


251 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:34:30 ]
ああ、>>248 は基数が p の倍数じゃない時限定な。
10 進数だと 10^x は素因数が 2 と 5 しかないから、
2 と 5 以外の素数は全てそうなる。



252 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:40:41 ]
つまり、2^32582657-1 は 9...(何か凄い桁数)...9 の約数になるはずということで。
循環の周期は p - 1 の約数のうち p の桁数以上のものになるから、
最大で 9 が 2^32582657-2 個、最小でも 9808358 個の 9 が並ぶことになるのか。
果てしないな。

253 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:41:38 ]
ああ、2^32582657-2 が 9808358 で割り切れるかどうかは知らない。

254 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:50:38 ]
その循環小数を乱数表にすると問題ありますか?

255 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:52:40 ]
>>247
循環小数の有理化に関するレスだよね。

>0.0...1 0...1 0...1 ... を (n-1)...(n-1) 倍すると 1 になるので、

この時点で、0.(n-1)...が1になる説明をまた>>247の頭から繰り返さなければならないわけで


256 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:57:40 ]
>>255
それは別な形で証明できるから問題ない。

257 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:14:51 ]
さて、無理数はどうしようか。

258 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:33:14 ]
無理数を・・・どうするの?

259 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:38:29 ]
有理数は分数で表現できるから、無理数をあらわす方法がないか・・・ってことでは

260 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:41:44 ]
無理数を誤差なく表現したいなら非正格関数型言語のような事をするしかないだろうな

261 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:46:26 ]
sqrt(2) なら sqrt(2) をそういうオブジェクトとして扱うことはできると思う。
でも、こういうのでは表しづらい無理数もあるかと思う。
解析解がない(数値解しか無い)ことが証明されている
方程式の解とかは、その方程式自体を中に保持したオブジェクトを使えるかもしれないけど、
その値をさらに別の式に組み込むと・・・とか考えていくと
無理がでてきそうな気がする。



262 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:58:15 ]
>>261
無理数の難しいところはそういう問題じゃないんだ、まずはカントールの対角線論法を理解してほしい。
ここで、自然数を列挙する縦方向と、無限小数の桁を列挙する横方向に広がった二次元の表ができ、無限小数に自然数が対応できず
自然数よりも実数の集合の方が個数が多いとなる。
問題は、これが意味するところで、Haskellなどを弄ってみると分るのだが、
この無限につづく少数の列には、後出しジャンケンのような要素を含むことが可能なのだ。
適当な実数を意味する関数 char f(int i) を考える i が桁を示し、戻り値が 0-9 までとする。
引数 i を指定すると、関数 f は常に同じ値を返すとする、この条件だけなら、この関数 f は getc を含む関数が作れることがわかると思う。
一回よんだら以後その値を使い続ければ、関数 f は常に同じ値を返すから。
そして、それは際限なく続けられる、少数は無限にあるので。

263 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:35:14 ]
f()で無理数をダンプして途中に自分のクレジットカードの番号が出てきても、誰も責めてはいけないという話ですか。

言い訳:「どこかで誰かのgetc()がクレジットカード番号を返す可能性がある限り、私共に責任はありませんっ」

ううむ、でこれ、自然数の集合では難しい話なの?


264 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:01:31 ]
メモ

任意の有限個の記号からなる数値定義
(√(12345/678.9)、x^123456789+...+3=0の解、etc.)
は全てひっくるめても加算無限個しかない。
つまりそういう方法では決してあらわせない無理数が
無限に存在する。
任意の無理数をあらわすには常に無限桁の入れ物が必要。
(任意の自然数をあらわすのはそれに応じた十分な
長さの有限桁の入れ物でいい)

265 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:22:02 ]
なるほど。分かりやすいわ。

266 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:33:14 ]
>>264
無限に存在とか考えないほうがいいかもしれない、特に「存在」
これ数学上の定義で自分たちの意識している「存在」の概念とはかけ離れた所があるから。

結局のところ「カントールの対角線論法」では、とりあえず実数の利用者に実数を全部ならべさせておいて
その後から、しめしめとその利用者が列挙しなかった実数を挙げて、ほら並べられなかったダメじゃんという論理になっている。
実際に実数を実装しようと思うと同じ事が起こるというだけ、それ以上でもそれ以下でもない。
これは意識したすべての実数については、表現可能だが利用者が意識していない実数についてまでは実装できないという事。
たとえば、純粋抽象クラスを実装する場合、その中身がかかれてなくてもそれを利用するコードは書ける。
しかし実際には純粋抽象の中身を書いたクラスを使わないと利用できない、具体的なコードは「後からでも書けるよ」というのと似ている。

267 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:57:43 ]
書いていて思ったんだが意識ってなんじゃろね、不思議じゃ

268 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:39:04 ]
「考慮」 と言った方がいいんじゃないかな。

269 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:10:40 ]
任意の実数は不可算無限個あり、バイト列の個数は自然数なので高々可算無限個どまりだから、無限に伸びるバイト列が利用できても任意の実数を表現することは無理

270 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 06:40:10 ]
>>269
任意の実数と言わずとも任意の有理数が表現できたらうれしいですけど。
「無限に伸びるバイト列」かあ。
多倍長計算のライブラリとかで、循環小数をきれいに扱えたららいいなあと
思うんだけど、どうなんでしたっけ。

271 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 16:18:51 ]
>>270
数式演算すればいいんじゃね?
Mathematicaと言わず、HP49Gくらいでいいじゃん。



272 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:57:53 ]
ttp://rayn.ld.infoseek.co.jp/news/01_1/infinity.html


273 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:15:51 ]
>269
言い換えてみる。
最初から無限長のバイト列(0で初期化済)があったとしても
サイコロを振るなりしてその中を埋める作業が永遠に終わらない
ので結局実数を表現することは無理。
とはいえ中を埋め続けるアルゴリズム(時間がたつほど精度が
上がる)があるような実数ならその実数はきちんと定義されたと
いえる。でそのような実数は可算無限個しかない。

>270
循環小数だとわかってるならそこまで格納できればいい。
1/3 = 1/(2^2-1) = 0.010101...(2)
1/7 = 1/(2^3-1) = 0.001001...(2)
1/3*1/7 = 1/21 = 3/1/(2^6-1) = 0.000011000011...(2)
周期aの数と周期bの数を掛けたら結果の周期はa*bかその約数
結果の周期の分だけ循環部分を展開して掛ければ
正しい結果を取り出せるのかな?
(結局は分数で扱うのが一番簡単そうに見えるのが)

>272
うーんなんだこりゃ

274 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:20:31 ]
よく考えたら間違ってる
1/3*1/3 = 1/9 = 7/(2^6-1) = 0.000111000111...(2)


275 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:43:36 ]
不可算無限を実現する必要は無いと思う。
実際の問題で扱う値ってある程度限定されてるから、
その実際に扱う値さえ表現できればそれで現実的には十分だと思う。

ただ、それでも無理な事もあるかもしれないけどね。

276 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:22:17 ]
>>273
>周期aの数と周期bの数を掛けたら結果の周期はa*bかその約数

なるほどそんな性質が。

>(結局は分数で扱うのが一番簡単そうに見えるのが)

例えば小数を分数に変換する、みたいなプログラムがたまにありますけど
有限な小数しか入力できないというのは片手落ちかなと思って。
周期が短い循環小数ぐらいはなんとかしたいかなーと。
例えば 1/7 の循環小数を入力したら、ちゃんと 1/7 を答えてくる、みたいな。

277 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:43:37 ]
>例えば 1/7 の循環小数を入力したら、ちゃんと 1/7 を答えてくる、みたいな。

循環小数を入力する書式さえ決めれば、どうにでもなるかと
循環部分を括弧で囲む 0.[142857] とか、循環する桁数を付ける 0.142857, 6 とか
142857/999999 で約分して 1/7

278 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:40:17 ]
>273
どこの分野でも測定機の精度が八桁もあったら高性能といわれる
実数をきちんと表現しても元データの誤差以上にはならないから
現実的には計算が遅くなるだけでなんの意味もなさないでしょ
役に立たたないことそんなに力説しないでもいいんじゃない

>276
循環小数なら整数演算だからスレ違いでしょ

279 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:45:04 ]
KY

280 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:58:12 ]
不可算無限個について、なにやら認識が膨らみすぎてどうにかなっている人がいるので、ちょっと書いとくよ。
可算な集合の特性は適当な集合について、これをコンピュータで言う所の class でいうと
それは隣の要素を知るためのインターフェイスがあるという事だよ。
適当なコンテナオブジェクトがあるとき、その内容を列挙する気がないのなら別に列挙インターフェイスをつけなくてもいいんだよ。
それが不可算無限個を扱うという事、作れないって事はない、それは機能が制限されたライブラリとなっているだけだから。

281 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:55:10 ]
>>277
なるほど。
ちなみに 142857/999999 というのは等比級数の無限和ですかね?



282 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 05:33:20 ]
>>281
x = 0.[142857]
1000000x = [142857] = 142857.[142857]
1000000x - x = 142857
x = 142857/999999


283 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 09:22:43 ]
>>282
なるほど。等比級数を持ち出すまでもないですね。ってゆうか確か高校で等比級数の和を
教えるときは同じような変形をするんだったかな。

浮動小数点の数値を整数分数に直してその後は分数として計算したら、精度的には
うれしい場合もあるかな?

284 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 10:28:18 ]
>循環小数を入力する書式さえ決めれば、どうにでもなるかと
>循環部分を括弧で囲む 0.[142857] とか、循環する桁数を付ける 0.142857, 6 とか

914314.3143...とかどうしよう。9[143]XX.0とかでいいか。

無理数か循環小数かよく解らない数はどう表そう。
オイラーの定数γとか。


285 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 11:51:53 ]
ttp://q.hatena.ne.jp/1130932358


286 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:06:33 ]
>>278
ビット表現に×2^nと正規化が出てきたら文字通り
浮動小数点だと言ってみるテスト
(まあ現在普通に浮動小数点といえば
誤差含む数を扱うためのものだが)

>>280
実際のところ実数が不可算無限個あるって性質は
無視していいよね。
数学上は可算無限個の中に含まれない実数を
作り出すこと自体無理だし、
実用上は誤差を考えれば有限桁ですむし。

>>284
表そうも何もどういう循環小数か分からない時点で

287 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:46:50 ]
>>286
有限のメモリーの中に無限を置けないのは、可算・非可算問わず事情は同じで
有限のメモリーの中"無限"という文字列が取り扱えるという事情も可算・非可算問わず事情は同じかと。

288 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 16:28:26 ]
まあ、この話が出てきたのはBCDなら万全とかいう変な人のレスからだし、
真剣に無限どうこう考えてるわけじゃないでしょ。

289 名前:デフォルトの名無しさん [2008/02/27(水) 20:29:04 ]
BCDなら万全とかいう変な人のスレ
pc11.2ch.net/test/read.cgi/db/1175091880/


290 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:20:43 ]
非加算な世界を考えれば、もうなんでもありですからね。
アルフ0 の一つ上は実数でしたっけ(連続体仮説?)

291 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:10:14 ]
>現在の数学で用いられる標準的な枠組みのもとでは
>「連続体仮説は証明も反証もできない命題である」ということが明確に証明されている。



292 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 00:01:38 ]
>>240
>(任意の循環小数には有限小数に変換できるような基数が必ず存在する?)
>もしかして有理数 m/n として表されるなら n を基数にすればいいとかそんな感じかな?
>n が素数でない場合はもうちょい工夫できそうな?

>>243
>・(n*x == o**y)を満たす整数x,yが存在するならoは何でも良い

nからよりコンパクトなoを求めるアルゴリズムが思い浮かばないよぅ。
素直にnを素因数分解するほうが近道か・・・

293 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 23:33:47 ]
素因数分解はコストが大きいですよ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<123KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef