外野がいきなりツッコミ入れるのもどうかと思うので、ここで。
この問題は、 m68k FPE のデバッグをしている時に、libm の exp() のテストがおかしいんじゃないかという疑問を持ったことに端を発する。
2012/05 時点で、m68k FPE の exp(x) が stub 実装で、常に x を返すという痛々しい事実はまず忘れておいて、そもそもこのテストコードの意味を考えてみる。
テストとは、
「信頼されたもの」を使って、「信頼出来るかわからないもの」が信頼出来るかどうか調べる行為である。
今回問題になってるテストコードは
exp(x + y) - exp(x) * exp(y) < eps
さてここで、「信頼されていないもの=調べたいもの」には .N をつけてみよう。
exp.N(x + y) - exp.N(x) * exp.N(y) < eps
左辺に信頼されていないものを集めて、右辺に信頼出来るものを集める。が、もうこれ以上移項できない。
そうするとこの式を見て分かるように、このテストコードでは、「左辺の式が eps 以下である」ことしかテストできていない。exp 自体が信頼できるかどうかは、このコードでは分からない。
仮に exp 自体がすでに信用出来るものである、とすると、このテストコードがテストすることになるのは、数学領域の「exp(x+y) = exp(x)*exp(y)」という式が数学的に正しいかどうか、であって libm の exp ではない。
このテストコードを、まがりなりにも libm のテストとして成立するように書きなおすとしたら、
#define Ex (計算済みのexp(x)を定数にしたもの)
#define Ey (計算済みのexp(y)を定数にしたもの)
exp(x + y) - Ex * Ey < eps
とすれば、
exp.N(x + y) < eps + Ex * Ey
となって、「exp(x + y) が信頼出来るかどうか」のテストコードとして成立する。
もちろんこうなると、信頼されている Ex * Ey は事前に計算してよいので、
#define Exy (計算済みの exp(x) * exp(y) を定数にしたもの)
exp.N(x + y) - Exy < eps
としてよい。
また、x+y も信頼されているので事前に計算してよい。z=x+y とおけば、
exp.N(z) - Ez < eps
となる。すでにこれは exp[2f]?_product のテストではない。掛け算どこにも出てこない。
以上、libm のテスト exp[2f]?_product は意味が無い、という考察でした。
もしかして、数学の正しさをテストしたかったんならごめん、ライブラリのテストコードじゃなくて他所でやって・・・
2012/05/30
2011/11/04
諸君、私はNetBSDが好きだ
generated by http://wids.net/lab/HELLSING/
一部事実に基づく創作であり、実際の NetBSD オペレーティングシステムとはほんの少ししか関係ありません。
一部事実に基づく創作であり、実際の NetBSD オペレーティングシステムとはほんの少ししか関係ありません。
諸君、私はNetBSDが好きだ
諸君、私はNetBSDが好きだ
諸君、私はNetBSDが大好きだ
カーネルが好きだ
ユーザランドが好きだ
ブートローダが好きだ
MI-MD構造が好きだ
クロスビルド環境が好きだ
x68kで
zaurusで
luna68kで
amigaで
alpha,acorn26,acorn32,cats,evbarm,hpcarm,lyonix,netwinder,shark,hp700,i386,xen,sun2,atari,cesfic,hp300,mac68k,mvme68k,news68k,next68k,sun3,emips,evbmips,ews4800mips,mipsco,newsmips,sbmips,sgimips,algor,arc,cobalt,hpcmips,pmax,amigappc,bebox,evbppc,ibmnws,macppc,mvmeppc,ofppc,prep,rs6000,sandpoint,evbsh3,mmeye,dreamcast,landisk,hpcsh,sparc,sparc64,vax,amd64で
この地上に存在するありとあらゆるNetBSDが大好きだ
移植性の高い設計が好きだ
他のOSのコードにNetBSD由来のRCSIDを見つけた時など心がおどる
全くドキュメントに記載されていない#define 定数が好きだ
三週間かかって1にするだけで動作することが分かった時など胸がすくような気持ちだった
i386のブートローダが1文字出力するたびにリアルモードとプロテクトモードを行き来することが好きだ
nop 6個だったところを256個にしたらカーネルが起動した時など感動すらおぼえる
m68k FPEなどもうたまらない
誰一人呼び出したことのなかったコードを正しく実装するのは最高だ
GPLで書かれたのを
BSDライセンスでコードを見ないで再実装した時など絶頂すら覚える
動作するコードが好きだ
謎コミットで動作しないアーキテクチャが増えることはとてもとても悲しいものだ
二条項BSDライセンスが好きだ
山のようなCopyright表示が巻末についていないのは屈辱の極みだ
諸君 私はNetBSDを カーネルが動けば完結する様なNetBSDを望んでいる
諸君 私に付き従うNetBSD好きの諸君 君たちは一体何を望んでいる?
更なるNetBSDを望むか
糞の様なNetBSDを望むか?
骨董品のようなマシンでもIPv6 Readyだぜヒャッハー!のようなNetBSDを望むか?
NetBSD!! NetBSD!! NetBSD!!
よろしい ならばNetBSDだ
だが、まともなデスクトップが無いので減り続けるdeveloperに耐え続けて来た我々には
ただのNetBSDではもはや足りない!!
大NetBSDを!! 一心不乱の大NetBSDを!!
我々はわずかに小数
NetBSDが移植されていないアーキテクチャに比べれば物の数ではない
だが諸君は一騎当千のカーネルオタクだと私は信じている
ならば我らは諸君と私で総兵力100万と1人の移植大好き集団となる
我らを忘却の彼方へと追いやり、仕様を公開しないメーカーを叩きのめそう
髪の毛をつかんで引きずり下ろし 眼(まなこ)をあけて思い出させよう
連中に真のリバースエンジニアリングを思い出させてやる
連中に割り込みアクノリッジサイクルを思い出させてやる
NetBSDには奴らの哲学では思いもよらない締め切りドリブン開発がある事を思い出させてやる
1000人のカーネルオタクの集団で 世界を``Of course it runs NetBSD''で埋め尽くしてやる
目標 iPhone
どこでもNetBSD作戦 状況を開始せよ
征くぞ 諸君
登録:
投稿 (Atom)