- 1 名前:デフォルトの名無しさん [2008/01/04(金) 14:25:44 ]
- 主にx86系で浮動小数点を扱う話題
- 175 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 21:41:38 ]
- >>174
1万円かけたところで誤差なんてないじゃん。 そもそも 「何との」 相対誤差を出したいんだ?
- 176 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 21:49:36 ]
- 1.17549435e-34円も-1.17549435e-34円も
四捨五入すれば0円か…その通りだ 真の値と測定値との間の誤差…セ氏度表示で ってダメ?
- 177 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 15:30:24 ]
- そんなことより >157 よ、聞いてくれ。(>161、>165 も同類か?)
おでん屋のオーナーもよく聞きなさい。 ベクトルの大小はものの本質ではない。扱うベクトルが小さいからといって天文学者が量子力学者を馬鹿にするような行動は慎まねばならぬ。スケールの大小と精度の長さは区別せねばな。 >161 > 例えば 1 前後のオーダーが普通な時に > 10^-14 みたいなサイズのベクトルがあったら > それは多分もの凄い勢いで数値誤差を含んでる。 IEEE754単精度では1〜10^-37ぐらいを同じ精度で計算するのは朝飯前じゃがのう。 >165 > もの凄く小さいベクトルは何らかの形で数値誤差が大きいかもしれないから、 量子力学者のベクトル計算は天文学者より数値誤差が大きいとでもいうのかね? > 数値誤差のせいで別の方向を向いてるなんてことは普通にある。 で、何に困ってるのかね?おでん屋のお姉ちゃんを見習って温度計を買い換えたらどうかの?ベクトル要素の性質と単位ベクトルの用途を聞かんことにはなんとも答えられんのう。 > どこから0ベクトル扱いにしていい物やら悩む。 これこれ、あくまでも目的は単位ベクトルじゃ。そうじゃったよな? >157 という訳で状況を確認させてもらおう。状況が解らない以上、>157 には最大公約数的な答えしか返ってこないじゃろうな。多目的用途のデータマイニング屋さんのように。 ・「ほぼ0」ってどれぐらい?0.01ぐらい? ・ベクトル要素の単位は何?質量?気温?無次元数?IPアドレス? ・ベクトル要素のソースは何?計算結果?計測器?物理定数? ・単位ベクトルを得る目的は? ・当然浮動小数点だよな?
- 178 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 16:11:41 ]
- >IEEE754単精度では1〜10^-37ぐらいを同じ精度で計算するのは朝飯前じゃがのう。
よくわからないけど、 1.0 + 1.0 * 10^-37 が正確に計算できるってこと?
- 179 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 17:53:25 ]
- >>178
うむ、この程度の計算なら0.5ulpのハードルはらくらくクリアだな。
- 180 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:15:27 ]
- その計算は仮数部が128ビット以上必要だろJK
- 181 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:48:35 ]
- ビックリするかもしれないが、0.5ulpさえクリアすればそれが「正確」というものなのだよ…
- 182 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:56:37 ]
- >180
キミは禁断の「真実の値」に迫りたいのかい? 恐ろしいことに、このケースでは仮数部は何桁あっても足りないのだよ… こうして毎日何人ものプログラマーがBCDの暗黒面に落ちていくのだよ…
- 183 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:05:00 ]
- >181
情報落ちは言い出した人の責任ですかそうですか >182 1.0 * 10^-37 を「有効数字2桁?」と考えた上での発言だ …前半の1.0のほうを忘れてたなそういえば
- 184 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:21:37 ]
- 10^-1に仮数部が何bit必要か計算してごらん…
おのずと1.0+1.0*10^-37の正体にも気付くさ… >こうして毎日何人ものプログラマーがBCDの暗黒面に落ちていくのだよ… やがて彼らは新天地で1÷3に出くわし、挫折の末、戻ってくるのさ… そして望む/望まざるに関わらず >181 を受け入れて生きていくしかないのだよ…クククッ
- 185 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:23:56 ]
- そこで分数表現が登場
- 186 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:54:01 ]
- ライブラリの中の人が10進2進変換に苦労してることも
知ってるし。だ れ が 1.0+1.0*10^-37の「真実の値」を 知りたいと言ったか。 分数は大小比較が困難だからなー。循環小数について 考えてみようよ。 手始めに0.111...と1.000...をどう正規化するかについて。
- 187 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:07:36 ]
- 循環小数は分数化できるよ
0.900900900900.... = 900/999 0.90909090.... = 90/99 0.9999.... = 9/9 = 1/1 大小比較は通分すればいいんじゃない
- 188 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:45:46 ]
- 分数を循環小数形式で格納する利点は無いものですかね
- 189 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:17:59 ]
- さあ、πを正確に小数で表現してください。
- 190 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:27:51 ]
- レベル低すぎ
厨房が涌いてるのか?
- 191 名前:デフォルトの名無しさん [2008/02/21(木) 00:54:42 ]
- > 10^-1に仮数部が何bit必要か計算してごらん…
> おのずと1.0+1.0*10^-37の正体にも気付くさ… うーん、待ってくれ。 「n^-a を適当な基数で基数変換して循環小数になったら n^-(a+1) の基数変換もまた循環小数である」 …これ、正しいよな? 「整数+循環小数もまた循環小数である」これも確かだよな?
- 192 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 01:30:20 ]
- >>177
> > もの凄く小さいベクトルは何らかの形で数値誤差が大きいかもしれないから、 > 量子力学者のベクトル計算は天文学者より数値誤差が大きいとでもいうのかね? 全体的にオーダーが小さい場合は問題ないと何度も言ってるのに 何でそう言う事言うかね。 > > 数値誤差のせいで別の方向を向いてるなんてことは普通にある。 > で、何に困ってるのかね?おでん屋のお姉ちゃんを見習って温度計を買い換えたらどうかの? > ベクトル要素の性質と単位ベクトルの用途を聞かんことにはなんとも答えられんのう。 そもそも温度計の話も意味が分からない。 「ほぼ0の値になるとおかしなことになる状況だ」 という状況説明が何もない。 気温(摂氏)で割ってるような式でもあるのか? それを華氏に直して意味はあるのか? 元の式を変える事ができないなら、 いくらデータを保持する時の尺度を変えようが、 結局もとの形式に変換しないと元の式には適用できない。 数値誤差が増えるだけの愚行。 それができるのは元の式を変える事ができる場合だけだが、 それなら別にデータをコンバートする必要も無く、式を変えればいいだけ。 > > どこから0ベクトル扱いにしていい物やら悩む。 > これこれ、あくまでも目的は単位ベクトルじゃ。そうじゃったよな? >157 例えば解析的には0ベクトルになるはずのものが 数値誤差で非0ベクトルになった場合もあるだろう。 そういう場合に単位ベクトルを得て何の意味があるのか? 意味がないなら0ベクトルになっても構うまい(場合によっては例外投げても構わん)。
- 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 ]
- 不可算無限を実現する必要は無いと思う。
実際の問題で扱う値ってある程度限定されてるから、 その実際に扱う値さえ表現できればそれで現実的には十分だと思う。 ただ、それでも無理な事もあるかもしれないけどね。
|

|