- 1 名前:デフォルトの名無しさん [2008/01/04(金) 14:25:44 ]
- 主にx86系で浮動小数点を扱う話題
- 152 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 15:24:07 ]
- Aさんが直線上を時速2キロで歩いています。
Aさんの5キロ後方のBさんが時速3キロでAさんを追いかけ始めました。 おっと、A,B間を往復する時速5キロの犬が同時にBさんのもとを出発しました。 さて、ここで問題です。 (続く)
- 153 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 18:09:27 ]
- 私が博士論文で作った無限桁BCDライブラリによるとだな。
永遠にアキレスは亀に追いつけないと結論が出ておる。 よって常にA≠B。犬は老衰で死ぬ。
- 154 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 18:35:48 ]
- IEEE754 と微分方程式によるとだな、そもそもNot a Number(数ではない)と結論が出ておる。
もしかして犬は虚数なんじゃね?
- 155 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 19:36:53 ]
- ……AとBが出会った瞬間犬はどっちを向いているでしょうか?
- 156 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:03:48 ]
- >>151
ほぼ 0 を 0 に切り捨てる処理を書く事はたまにある。
- 157 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:16:35 ]
- ほぼ0なベクトルが与えられる可能性のあるときにを単位ベクトルに正規化するとき悩むな。
分岐を使わないいいい方法ってないかな?
- 158 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:18:15 ]
- どうせ長さ取得する必要があるんだし
分岐したんでいいんじゃないかな。
- 159 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:02:42 ]
- >>155
そりゃあ「尻尾の反対側」だろうな。 なんたって虚数犬だからな。 BがAを追い越した10分後にどっち向いてるかも興味があるな。
- 160 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:57:57 ]
- >>157
まずベクトルの要素の中から一番デカい数値を探すんだ。 そしたらそいつが1.0になるように他の全要素をスケーリングする。 ここまでは簡単だろ?n次元ベクトルならn-1回の比較とn回の割り算をすれば済む話だ。 できたか?できたら後はフツーに単位ベクトルを得るがよろし。二乗や平方根が出てくるだろうが、もはや二乗によるオーバーフローや平方根によるアンダーフローの危険性はぐっと減るはず。 まあようするにアレだ。単位球を得る前に、外接する立方体(一辺の長さは2.0な)を一度求めてみましょうという話だ。 …という仕事を昔データマイニングでしたなあ。
- 161 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:06:02 ]
- 小さい数値が出てきてる時点で、
そのベクトルを求める際に 数値誤差がたんまり入ってる恐れがあるじゃん。 全体的なオーダーが小さい場合はそういう手法は役に立つと思うけど、 例えば 1 前後のオーダーが普通な時に 10^-14 みたいなサイズのベクトルがあったら それは多分もの凄い勢いで数値誤差を含んでる。 困るのは多分こういう時。
- 162 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 00:21:16 ]
- >>161
> 例えば 1 前後のオーダーが普通な時に > 10^-14 みたいなサイズのベクトルがあったら > それは多分もの凄い勢いで数値誤差を含んでる。 うーん、そういうものなの?誤差?物理とか計測の話だったの? データマイニングで言うとこんなケースかな。(単精度正規数の場合ね) あるとこにおでん屋さんがいました。 店長はベクトル(気温,売上高)を使ったデータマイニングで仕入れ管理を始めました。 「まあ大変。昨日まで1℃だった気温が突然1.17549435e-38℃よ!氷点下はまぬがれたけどシステムがSIGFPEを吐いて止まってしまったわ!」 さあどうしよう。そうだ!気温をセ氏からカ氏に変えたらいいのでは? 過去のデータは全て変換して、今日の気温32°Fっと…うまくいったようです! ということで、物理屋の諸君も単位を柔軟に変えてみることをお薦めしたい。 特に零点変更は効果的だ。
- 163 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 01:07:35 ]
- 興味深い話だ。
いま >>4 の第二フェーズあたりだな。このスレはここからがおもしろい。
- 164 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 02:04:43 ]
- 摂氏0℃付近になる事で問題が発生する状況が想像できないなあ。
- 165 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 02:22:08 ]
- もの凄く小さいベクトルは何らかの形で数値誤差が大きいかもしれないから、
それを正規化して果たしてどれだけの意味があるのか分からない、 ってのがあるんだよな。 演算でオーバーフローとか現れなかったとしても、 そうやって得たベクトルに意味はあるの? ってところ。 解析的に解くと、(もの凄く小さいながらも)とある方向を向いているはずなのに、 数値誤差のせいで別の方向を向いてるなんてことは普通にある。 そういうのはばさっと0ベクトル扱いにするのもありだと思うが、 全体のオーダーが小さい場合もあるかもしれないから、 どこから0ベクトル扱いにしていい物やら悩む。
- 166 名前:絶対零度付近ではいろいろ起きそうだがw mailto:sage [2008/02/19(火) 02:28:13 ]
- 摂氏-1度の氷に摂氏-1度の水を掛けると……
- 167 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 03:21:54 ]
- 温度なんて相対値か絶対温度の形でしか
式に現れないはずだからなあ。 原点が問題になることは無いはず。
- 168 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 10:35:27 ]
- 「ただ1回計算をしただけでは結果の正しさについてほとんど何もわからない」
(伊理,藤野:"数値計算の常識")
- 169 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 14:18:06 ]
- ただ1個の標本だけでは母集団の分散について何も言うことができない
- 170 名前:おでん屋のお姉さん mailto:sage [2008/02/19(火) 18:50:49 ]
- おでんやの店長(>162)です。
あたしはねぇ、気温を入力して売り上げが予想できればそれでいいの。 工学科卒のオーナーったらひどいのよ。 こないだの大晦日とか、気温も売り上げも0に近かったんだけど、 「何らかの形で数値誤差が大きいかもしれない」とか言い出すのよ!もー! 「それを正規化して果たしてどれだけの」やかましいわ、キー! あたしは一生懸命打ち込んでるの!気温が低いのも売り上げが伸びないのもれっきとした「事実」なの!暖かろうが寒かろうが「事実」に貴賎はないの! >168 >「ただ1回計算をしただけでは結果の正しさについてほとんど何もわからない」 何回計算させれば気が済むのよ!あたしはデートなの。もう後がないのよ! もういいわ。ム板に相談した私がバカだった。 ケルビン温度計買ってくるわ。そうすればあたしは幸せになれるのよね? どこで売ってるの?Amazon?楽天? …もし気温が0°Kになったらどうするかですって? そしたらまたセ氏に戻すわ。
- 171 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 21:09:53 ]
- >170
あなたが観測した気温が1.17549435e-38℃だったとして、 実際には温度計の目盛り線がちょっと曲がっていて 本当の気温はマイナス1.17549435e-38℃だったかも しれない。でここに出てくる数字だけから判断すると 相対誤差200%なんていう話になってしまう。 売り上げ予想は「事実」ではないでしょ? 入力する気温が氷点下かどうかで 「今月は赤字に転落する恐れがあります」なんて オーナーに報告しに行かなければならなくなる瀬戸際 にあなたは立っているかもしれない。 真冬日の定義に従って 「今シーズンの暖冬傾向は云々」という文章を 書くのを仕事としている気象庁の中の人は リアルでそういう状況なんじゃないかな。
- 172 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 21:17:09 ]
- >しれない。でここに出てくる数字だけから判断すると
>相対誤差200%なんていう話になってしまう。 ならねーよ (273.15 - 1.17549435e-38) 〜 (273.15 + 1.17549435e-38) だから誤差は0でいいよ
- 173 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 21:22:59 ]
- >>171
誤差の出し方全く分かってないな。
- 174 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 21:39:11 ]
- >172
だからー、170の使ってる予測式が 気温(セ氏度)×1万円 だったらどうすんの?て話。 物理だけが数学じゃねーぞ。 水と氷だって大違いだぞ。 >173 ここでは相対誤差でなく絶対誤差を使うのが大人のたしなみ。 こうですか分かりません!
- 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 が並ぶことになるのか。 果てしないな。
|

|