【FPU】 浮動小数点 【SSE】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/01/04(金) 14:25:440002デフォルトの名無しさん
2008/01/04(金) 14:27:07Duron,Athlon,PenIII,Pen4,Athlon64,PenD
とかで、それぞれどのように違うの?
0003ヽ・´∀`・,,)っ━━━━━━┓
2008/01/04(金) 20:39:16CSRを操作することで精度度外視で高速動作するモードがある。
命令セットマニュアル嫁
0004デフォルトの名無しさん
2008/01/05(土) 00:34:25しかし200レスあたりでネタがつきて、その後はパッタリと伸びなくなる。
0005デフォルトの名無しさん
2008/01/05(土) 05:23:34デフォの誤差じゃなくて、CPUごとの誤差だよ。
同じ計算してもCPUが違うと結果が異なるって話。
CPU自体の違いだから、ソフトじゃどうにもならないって話
0006デフォルトの名無しさん
2008/01/05(土) 05:24:01まちがえた。3へのレス
0007ヽ・´∀`・,,)っ━━━━━━┓
2008/01/05(土) 05:30:130008デフォルトの名無しさん
2008/01/05(土) 05:37:080009ヽ・´∀`・,,)っ━━━━━━┓
2008/01/05(土) 05:53:23それこそCPUごとの差を知る必要がない用途でだけね。
イミネェ
0010デフォルトの名無しさん
2008/01/05(土) 07:14:38float a,b,c;
b=10/3;
c=20/3;
a=b/c;
とかってやると、Duronと、Athlon64では、aの結果が異なる。
という一例があるとして、
じゃあ、DuronとAthlon64の浮動小数点コプロ間は、どのぐらい誤差を生じるものなのだろうか。
っていう疑問なんだけど
0011ヽ・´∀`・,,)っ━━━━━━┓
2008/01/05(土) 07:31:10はい、ソースの提示を求めます
0012デフォルトの名無しさん
2008/01/05(土) 07:37:26だから、どうゆう状況でCPU間の誤差が出るか分かってば質問なんかしないって。
どうゆう状況かわからないけど、誤差が出るときがあるんだって。
企業とかでネトゲ造ったことある奴なら知ってることだろ。
だからネトゲは、キー入力ではなく、座標を直接送信するか、
サーバとかの1台のPCで座標を計算する
0013ヽ・´∀`・,,)っ━━━━━━┓
2008/01/05(土) 07:41:470014デフォルトの名無しさん
2008/01/05(土) 08:09:35今、再現してるからちょっとまってろ
0015デフォルトの名無しさん
2008/01/05(土) 08:16:41まだかよ
0016デフォルトの名無しさん
2008/01/05(土) 09:46:360017デフォルトの名無しさん
2008/01/05(土) 10:03:150018デフォルトの名無しさん
2008/01/05(土) 10:07:530019デフォルトの名無しさん
2008/01/05(土) 10:20:195年くらい起動していないから動くかどうか怪しいが
0020デフォルトの名無しさん
2008/01/05(土) 10:23:360021ヽ・´∀`・,,)っ━━━━━━┓
2008/01/05(土) 10:26:14wwwwwwwwwwww
アレのせいで誤解されてるんじゃないのかね
でも問題の初期の奴って回収されたんじゃなかったっけ
0022デフォルトの名無しさん
2008/01/05(土) 10:53:41昼にはうぷできるかも
0023デフォルトの名無しさん
2008/01/05(土) 10:55:47てことは、その前の浮動小数点演算で、例外が発生してるのかも
0024デフォルトの名無しさん
2008/01/05(土) 10:59:230025デフォルトの名無しさん
2008/01/05(土) 12:07:530026デフォルトの名無しさん
2008/01/05(土) 14:00:580027デフォルトの名無しさん
2008/01/05(土) 15:46:53わっふるわっふる
0028デフォルトの名無しさん
2008/01/05(土) 15:49:38わっふるわっふる
0029デフォルトの名無しさん
2008/01/05(土) 17:35:37わっふるわっふる
0030デフォルトの名無しさん
2008/01/05(土) 17:46:20系統が違うなら、C とか使わずアセンブリ言語使って同等のコードを作らんとあかんぜよ。
0031デフォルトの名無しさん
2008/01/06(日) 06:04:39その後の除算結果が、DuronとAthlon64で異なる。
回避するには、fpreset()すること。
どうゆうときに、例外がでたらでDuronとAthlon64で、浮動小数点演算が異なるのかは不明。
追求したい人はやってみて
0032デフォルトの名無しさん
2008/01/06(日) 09:41:110033デフォルトの名無しさん
2008/01/06(日) 10:07:29異なるだけじゃ解らないし、試しようがない。
計算内容と真値と実際の計算結果を出してくれなきゃね。
0034デフォルトの名無しさん
2008/01/08(火) 09:14:59FPUの問題でないだろ。
>座標を直接送信するか、
>サーバとかの1台のPCで座標を計算する
両者正反対の手法な件
0035デフォルトの名無しさん
2008/01/09(水) 02:46:290036デフォルトの名無しさん
2008/01/09(水) 09:38:020037デフォルトの名無しさん
2008/01/09(水) 20:05:530038デフォルトの名無しさん
2008/01/09(水) 21:02:150039デフォルトの名無しさん
2008/01/09(水) 21:21:19無理に盛り上げないでOK
0040デフォルトの名無しさん
2008/01/09(水) 21:21:400041デフォルトの名無しさん
2008/01/09(水) 22:24:03マダー?
0042デフォルトの名無しさん
2008/01/09(水) 22:31:040043デフォルトの名無しさん
2008/01/09(水) 22:44:270044デフォルトの名無しさん
2008/01/09(水) 22:51:030045デフォルトの名無しさん
2008/01/09(水) 22:51:080046デフォルトの名無しさん
2008/01/10(木) 05:33:260047デフォルトの名無しさん
2008/01/11(金) 02:27:21いまだにx87使った方が速かったりする?
0048ヽ・´∀`・,,)っ━━━━━━┓
2008/01/11(金) 02:33:17超越関数もテーラー展開とかすれば並列処理できる部分があるから
その辺は有利に働く。
0049デフォルトの名無しさん
2008/01/11(金) 08:39:43それってsingle精度だけかな。doubleもsingleもFPU使ってて一緒だと思ってdoubleだけ使ってたよ。
0050デフォルトの名無しさん
2008/01/11(金) 11:44:13>超越関数もテーラー展開とかすれば並列処理できる部分があるから
一瞬、
並列処理って SSE2 の並列演算命令を使ってるってこと? それともマルチスレッド?
っと思ったんだけど
>>49 のレスを見ると前者のことですか。
ちなみに >>49 で single だけってのは double だと並列度が低くてあまり効果がないという
ことですか?
0051デフォルトの名無しさん
2008/01/11(金) 15:21:00今時全部doubleで計算しやしないと思うのだが。
0052デフォルトの名無しさん
2008/01/11(金) 19:23:070053デフォルトの名無しさん
2008/01/11(金) 19:31:20# つーか、数値解析でも近似値計算は意外に有用だし。
0054デフォルトの名無しさん
2008/01/11(金) 19:35:28なるほど・・・。確かにそれはアリだな。
0055デフォルトの名無しさん
2008/01/11(金) 19:45:43素朴な疑問なんですが、float では精度が足りない、というその基準は何なんでしょうか。
例えば、数値計算において何か不可欠な条件があって、それを実現するために
数値の精度を決定していくと float では足りない、みたいなことになったりしますか?
0056デフォルトの名無しさん
2008/01/11(金) 19:49:088桁以上まで収束させたり
数百万の値の足し算とかしたりするからね。
0057デフォルトの名無しさん
2008/01/11(金) 20:49:46一行目と二行目はおそらくほとんど同じことを意味していると思いますが
(まさか指数部を変化させたくない、なんてことはないですよね)
その8桁以上の8ってのは、何か意味付けできるんでしょうかねえ。
数値計算以外で、たとえばコンピュータのモニタの解像度を決めるときの条件として
「文字が普通に読める程度以上の解像度」とか、(無理矢理)意味付けできるわけですが、
数値計算の場合は、どうなのかなあと。
0058デフォルトの名無しさん
2008/01/11(金) 20:55:132つの計算値の差を求めたいときとか、
差が小さいともの凄く収束させないとあかんのんよ。
0059デフォルトの名無しさん
2008/01/11(金) 21:09:00real(kind=wp) :: x, y, z
0060デフォルトの名無しさん
2008/01/13(日) 04:14:00あくまでもIEEE754準拠か、それが問題だ。
ある意味、科学者的な考えvsエンジニア的な考え?
0061デフォルトの名無しさん
2008/01/13(日) 04:25:05メモリ帯域がもろにスピードに効いてくるな。L2が十分に大きければ
問題はないと思うが。
そこへ行くとSSE2はレジスタ内でやりくりできるのでかなりの
速度アップになる。
この気持ち悪いインターフェースは過去の負の遺産ですよね。
0062デフォルトの名無しさん
2008/01/13(日) 04:27:180063デフォルトの名無しさん
2008/01/13(日) 10:39:01スタック内で済ませられるよ。
0064デフォルトの名無しさん
2008/01/13(日) 15:00:08マシンイプシロン
0065ヽ・´∀`・,,)っ━━━━━━┓
2008/01/13(日) 18:35:03普通は直接読み書きするメモリはL1だ。
0066デフォルトの名無しさん
2008/01/13(日) 20:20:01#define _DF float
#define _FMT "%d %25.22f\n"
#define _ONE 1.0f
#define _HALF 0.5f
int main(int ac, char **av)
{
_DF x = _ONE;
_DF a = _ONE;
int i;
for(i = 0; (_DF)(x + a) > (_DF)_ONE; i++){
printf(_FMT, i, a);
a *= (_DF)_HALF;
}
}
_DFをfloatにしてもdoubleにしても結果が同じです
なぜでしょうか?
0067デフォルトの名無しさん
2008/01/13(日) 20:30:07例えばx86におけるfpuのように、floatでもdoubleでも同じ演算ユニットを使うとそうなります。
0068デフォルトの名無しさん
2008/01/13(日) 20:32:22gccなら、-mfpmath=sse にするとどちらも-mfpmath=fpu のときより少ない回数で終了するよ。
0069デフォルトの名無しさん
2008/01/13(日) 21:08:23cygwinのgcc使ってるんですが
-mfpmath=sse -mfpmath=fpu
どちらを指定しても最初(なにもしないとき)と結果は同じでした
0070デフォルトの名無しさん
2008/01/14(月) 04:22:38まさか、sseのないCPUって落ち? つーか、-msse(or sse2など) つけてないのかな?
一応こんな感じなんだけど。
--
$ gcc --version
gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--
$ gcc foo.c -msse2 -mfpmath=sse
--
# _DF == float
$ ./a|tail -1
23 0.0000001192092895507812
--
# _DF == double
$ ./a|tail -1
52 0.0000000000000002220446
--
$ gcc foo.c
--
$ ./a|tail -1
63 0.0000000000000000001084
0071ヽ・´∀`・,,)っ━━━━━━┓
2008/01/14(月) 07:03:53sizeof (float) と sizeof (double) だしてみて
古いコンパイラだとfloat=doubleになる希ガス
0072デフォルトの名無しさん
2008/01/14(月) 09:13:04アンダースコアを先頭に付けた識別子は
処理系の予約語だから(本当はもうちょっと規則が複雑)、
自分で定義しちゃダメ。
0073デフォルトの名無しさん
2008/01/14(月) 23:01:120074デフォルトの名無しさん
2008/01/14(月) 23:14:45だからなに?
0075デフォルトの名無しさん
2008/01/15(火) 11:35:56平:勉強になりました。
賢:常識じゃね。
0076デフォルトの名無しさん
2008/01/15(火) 11:40:58それで?
0077デフォルトの名無しさん
2008/01/15(火) 13:30:570078デフォルトの名無しさん
2008/01/15(火) 15:04:15πの16進内部値は次の通りである
4 * 0.C90FDAA22168C234C
0079デフォルトの名無しさん
2008/01/15(火) 16:18:470080デフォルトの名無しさん
2008/01/15(火) 20:11:24どんな計算してるんでしょう?
0081デフォルトの名無しさん
2008/01/15(火) 22:49:45しかも暗黙の 1 なしで。
0082デフォルトの名無しさん
2008/01/16(水) 00:10:510083デフォルトの名無しさん
2008/01/18(金) 16:32:040084デフォルトの名無しさん
2008/01/18(金) 17:54:100085デフォルトの名無しさん
2008/01/19(土) 01:00:350086デフォルトの名無しさん
2008/01/19(土) 19:15:52指数部の最初のビットを見れば1以上か否かわかる、ように
した方が美しいと思うんだが
0087デフォルトの名無しさん
2008/01/19(土) 19:27:300088デフォルトの名無しさん
2008/01/19(土) 19:29:390089デフォルトの名無しさん
2008/01/19(土) 19:38:590090デフォルトの名無しさん
2008/01/19(土) 19:43:23ばか?
0091デフォルトの名無しさん
2008/01/21(月) 22:10:51最小の正数の逆数が飛んでしまうとかそんな理由か。
0092デフォルトの名無しさん
2008/01/26(土) 22:41:46∧∧ ミ _ ドスッ
( ,,)┌─┴┴──┐
/ つ ここでBCD.│
〜′ /´ └─┬┬――┘
∪ ∪ ││ _ε3
0093デフォルトの名無しさん
2008/01/27(日) 00:03:52こんなのでいいか?テンプレ。 >451
Q1. BCDだと誤差出ないよね?
A1. ではBCDで1÷3を計算してみよ。
Q2. IEEE754 が 1÷10 を正確に表せないのはけしからん。
A2. 1÷3 を有限桁で表せない10進数もけしからんよね。
Q.3 とにかく浮動小数は誤差が出るって聞いたんだい!
A.3 だからといってBCDに誤差が出ないわけではない。
Q.4 キー!でも浮動小数の誤差の出方はわかりづらいだろ!
A.4 BCDの誤差の出方よりわかりやすいという職業の人もいる。
Q.5 BCDをバカにするな!金融をバカにするかぁ技術者さんよぉ!
A.5 あなたの被害妄想。
続く…
460 名前: デフォルトの名無しさん [sage] 投稿日: 04/08/10 11:53
Q6. バーカバーカ!誤差の許されない分野にBCDが使われてるよ!
A6. 本当なの?じゃあBCDを正しく理解できている優秀なSEに感謝しましょう。
Q7. でもでも誤差の許されない分野にBCDが使われてるよ!
A7. しつこいね。BCDを使うと誤差を許さなくなるわけではないよ。
Q8. オーゥワタシ、メソポタミアジンデース。ニポンジン10進スキネー。ナゼ?
A8. 祖先から伝えられてきた日本の美しい伝統だからです。
0094デフォルトの名無しさん
2008/01/27(日) 00:06:240095デフォルトの名無しさん
2008/01/27(日) 00:39:270096デフォルトの名無しさん
2008/01/27(日) 00:43:500097デフォルトの名無しさん
2008/01/27(日) 02:18:05IEEE754に準拠したのは80387以降。(80287XLというのも一時期あったらしいが)
それまで負の無限大は無かった。
tan91°とかどうしてたのかねぇ。
0098デフォルトの名無しさん
2008/01/27(日) 02:53:440099デフォルトの名無しさん
2008/01/27(日) 09:02:070100デフォルトの名無しさん
2008/01/27(日) 09:08:410101デフォルトの名無しさん
2008/01/27(日) 10:16:030102デフォルトの名無しさん
2008/01/27(日) 11:46:35馬鹿が居る。
0103デフォルトの名無しさん
2008/01/27(日) 11:50:250104デフォルトの名無しさん
2008/01/27(日) 12:15:40無理数
0105デフォルトの名無しさん
2008/01/27(日) 12:48:410106デフォルトの名無しさん
2008/01/27(日) 12:55:520107デフォルトの名無しさん
2008/01/27(日) 13:07:37多倍長計算はそういう制限がない。
0108デフォルトの名無しさん
2008/01/27(日) 13:47:360109日本語に不自由する人はこれだから困る
2008/01/27(日) 15:24:05BCDという制限がついた多倍長。
0110デフォルトの名無しさん
2008/01/27(日) 15:49:230111デフォルトの名無しさん
2008/01/27(日) 20:47:35整数命令で大小判定できるからじゃん?
バイアスでなくて2の補数とかにしたい気持ちはよく解るが。
0112デフォルトの名無しさん
2008/01/28(月) 10:23:490113デフォルトの名無しさん
2008/01/28(月) 10:24:530114デフォルトの名無しさん
2008/01/28(月) 14:31:31符号部 ibit
指数部 7bit 0x40のげた付き10のべき
仮数部 短精度 24bit 倍精度 56bit 正規化されたBCD(6桁/14桁)
0115デフォルトの名無しさん
2008/01/28(月) 20:05:49> >>86
> 整数命令で大小判定できるからじゃん?
それはゲタが1024だとできないの?
0116デフォルトの名無しさん
2008/01/29(火) 02:55:272の補数用の比較命令使いたかったらまず仮数部をだな
0117デフォルトの名無しさん
2008/01/29(火) 13:13:460118デフォルトの名無しさん
2008/01/30(水) 01:23:30>windowsの電卓オススメ
ヘルプによると一部有理数を使えるようだな。感心感心。
がしかし、関数電卓にすると平方根ボタンが消えるのはなぜだ?
どうやら平方根は関数ではないらしい。
[x^2]の逆関数で何とかしのげるが。
0119デフォルトの名無しさん
2008/01/30(水) 01:32:160120デフォルトの名無しさん
2008/01/30(水) 01:33:010121デフォルトの名無しさん
2008/01/30(水) 01:53:260122デフォルトの名無しさん
2008/01/30(水) 01:57:210123ヽ・´∀`・,,)っ━━━━━━┓
2008/01/30(水) 02:07:000124デフォルトの名無しさん
2008/01/30(水) 03:09:32.5乗している
0125ヽ・´∀`・,,)っ━━━━━━┓
2008/01/30(水) 03:17:500126デフォルトの名無しさん
2008/01/30(水) 15:06:54[3][Inv][x^2]
0127デフォルトの名無しさん
2008/01/30(水) 17:54:58簡単なループで計算できるからつけてみたら、その後ほぼ標準装備になったとか?
0128デフォルトの名無しさん
2008/01/30(水) 18:19:020129デフォルトの名無しさん
2008/01/30(水) 18:25:490130デフォルトの名無しさん
2008/01/30(水) 18:38:360131デフォルトの名無しさん
2008/01/30(水) 19:07:270132デフォルトの名無しさん
2008/01/30(水) 23:02:59仮数部 X 10の指数部乗 の形式や
小数点以上32bit+小数点以下32bitといった10進数の表現も多い。
0133デフォルトの名無しさん
2008/01/30(水) 23:11:320134デフォルトの名無しさん
2008/02/01(金) 07:01:47Windowsの電卓をコマンドラインから実行して計算結果をもらうにはどうすればよいのでしょう?
0135デフォルトの名無しさん
2008/02/01(金) 08:14:24ttp://www.njg.co.jp/d/3594.html
ttp://www.t-ueda.jp/edu-momo/chi_faq/2/route.htm
0136デフォルトの名無しさん
2008/02/09(土) 00:55:33∧∧ ミ _ ドスッ
( ,,)┌─┴┴─────────┐
/ つ ここでユークリッドの互除法. │
〜′ /´ └─┬┬―───────―┘
∪ ∪ ││ _ε3
0137デフォルトの名無しさん
2008/02/10(日) 11:54:358087 デフォルトの射影的無限大ってよく解らないんだけど。
Projective モードで tan(90.000・・・°) を計算すると、
無限大の符号はどっち向くの?
0138デフォルトの名無しさん
2008/02/11(月) 12:05:488087FPTANのパラメータは[0, π/4)の範囲
8087デフォルトでは-∞と+∞の相違は意味が無い(+0,-0と同様)
実際には、80bit-->64bitの変換で色々起こると思う
0139デフォルトの名無しさん
2008/02/12(火) 02:09:1289.999… == 90.000…
が真であることを証明してもらおうか。
0140デフォルトの名無しさん
2008/02/12(火) 12:29:460141デフォルトの名無しさん
2008/02/12(火) 14:14:23先生そんなの認めませんっ。
無限桁BCDは世界最強なんだろ?
手始めに等号判定を実装してもらおうじゃないのさ。
アルゴリズムだけでもいいから示してくれ。
等号すら満足に行えない数値表記なんて何の役に立つ?
0142デフォルトの名無しさん
2008/02/14(木) 10:16:560143デフォルトの名無しさん
2008/02/16(土) 13:37:480144デフォルトの名無しさん
2008/02/16(土) 14:24:03おかあさんがゆってた
0145デフォルトの名無しさん
2008/02/17(日) 21:28:35ではどうしろと?
A-Bが0だからといってA==Bとは限らない。
ママにそういってこい。
0146デフォルトの名無しさん
2008/02/17(日) 21:50:29どうもこうも、不等号を使うしかないだろ。
0147デフォルトの名無しさん
2008/02/17(日) 21:56:150148デフォルトの名無しさん
2008/02/18(月) 00:13:46そうそう、マシンイプシロンあたりで。宿題スレでよくみます。
0149デフォルトの名無しさん
2008/02/18(月) 00:45:06>>148
マシンイプシロンと等号になんの関係が?
まさか、まさかとは思うが、君達は A==B を判定するのに A÷B させて1.0に迫るのを眺めているわけではないよな?
0150デフォルトの名無しさん
2008/02/18(月) 09:12:370151デフォルトの名無しさん
2008/02/18(月) 13:52:32行列ならほとんど積和算だし
ソートは大小比較であり等号なんて使わない。
もしかして実数データをstable sortでもしたいのかい?
0152デフォルトの名無しさん
2008/02/18(月) 15:24:07Aさんの5キロ後方のBさんが時速3キロでAさんを追いかけ始めました。
おっと、A,B間を往復する時速5キロの犬が同時にBさんのもとを出発しました。
さて、ここで問題です。
(続く)
0153デフォルトの名無しさん
2008/02/18(月) 18:09:27永遠にアキレスは亀に追いつけないと結論が出ておる。
よって常にA≠B。犬は老衰で死ぬ。
0154デフォルトの名無しさん
2008/02/18(月) 18:35:48もしかして犬は虚数なんじゃね?
0155デフォルトの名無しさん
2008/02/18(月) 19:36:530156デフォルトの名無しさん
2008/02/18(月) 20:03:48ほぼ 0 を 0 に切り捨てる処理を書く事はたまにある。
0157デフォルトの名無しさん
2008/02/18(月) 20:16:35分岐を使わないいいい方法ってないかな?
0158デフォルトの名無しさん
2008/02/18(月) 20:18:15分岐したんでいいんじゃないかな。
0159デフォルトの名無しさん
2008/02/18(月) 21:02:42そりゃあ「尻尾の反対側」だろうな。
なんたって虚数犬だからな。
BがAを追い越した10分後にどっち向いてるかも興味があるな。
0160デフォルトの名無しさん
2008/02/18(月) 21:57:57まずベクトルの要素の中から一番デカい数値を探すんだ。
そしたらそいつが1.0になるように他の全要素をスケーリングする。
ここまでは簡単だろ?n次元ベクトルならn-1回の比較とn回の割り算をすれば済む話だ。
できたか?できたら後はフツーに単位ベクトルを得るがよろし。二乗や平方根が出てくるだろうが、もはや二乗によるオーバーフローや平方根によるアンダーフローの危険性はぐっと減るはず。
まあようするにアレだ。単位球を得る前に、外接する立方体(一辺の長さは2.0な)を一度求めてみましょうという話だ。
…という仕事を昔データマイニングでしたなあ。
0161デフォルトの名無しさん
2008/02/18(月) 22:06:02そのベクトルを求める際に
数値誤差がたんまり入ってる恐れがあるじゃん。
全体的なオーダーが小さい場合はそういう手法は役に立つと思うけど、
例えば 1 前後のオーダーが普通な時に
10^-14 みたいなサイズのベクトルがあったら
それは多分もの凄い勢いで数値誤差を含んでる。
困るのは多分こういう時。
0162デフォルトの名無しさん
2008/02/19(火) 00:21:16> 例えば 1 前後のオーダーが普通な時に
> 10^-14 みたいなサイズのベクトルがあったら
> それは多分もの凄い勢いで数値誤差を含んでる。
うーん、そういうものなの?誤差?物理とか計測の話だったの?
データマイニングで言うとこんなケースかな。(単精度正規数の場合ね)
あるとこにおでん屋さんがいました。
店長はベクトル(気温,売上高)を使ったデータマイニングで仕入れ管理を始めました。
「まあ大変。昨日まで1℃だった気温が突然1.17549435e-38℃よ!氷点下はまぬがれたけどシステムがSIGFPEを吐いて止まってしまったわ!」
さあどうしよう。そうだ!気温をセ氏からカ氏に変えたらいいのでは?
過去のデータは全て変換して、今日の気温32°Fっと…うまくいったようです!
ということで、物理屋の諸君も単位を柔軟に変えてみることをお薦めしたい。
特に零点変更は効果的だ。
0163デフォルトの名無しさん
2008/02/19(火) 01:07:35いま >>4 の第二フェーズあたりだな。このスレはここからがおもしろい。
0164デフォルトの名無しさん
2008/02/19(火) 02:04:430165デフォルトの名無しさん
2008/02/19(火) 02:22:08それを正規化して果たしてどれだけの意味があるのか分からない、
ってのがあるんだよな。
演算でオーバーフローとか現れなかったとしても、
そうやって得たベクトルに意味はあるの? ってところ。
解析的に解くと、(もの凄く小さいながらも)とある方向を向いているはずなのに、
数値誤差のせいで別の方向を向いてるなんてことは普通にある。
そういうのはばさっと0ベクトル扱いにするのもありだと思うが、
全体のオーダーが小さい場合もあるかもしれないから、
どこから0ベクトル扱いにしていい物やら悩む。
0166絶対零度付近ではいろいろ起きそうだがw
2008/02/19(火) 02:28:130167デフォルトの名無しさん
2008/02/19(火) 03:21:54式に現れないはずだからなあ。
原点が問題になることは無いはず。
0168デフォルトの名無しさん
2008/02/19(火) 10:35:27(伊理,藤野:"数値計算の常識")
0169デフォルトの名無しさん
2008/02/19(火) 14:18:060170おでん屋のお姉さん
2008/02/19(火) 18:50:49あたしはねぇ、気温を入力して売り上げが予想できればそれでいいの。
工学科卒のオーナーったらひどいのよ。
こないだの大晦日とか、気温も売り上げも0に近かったんだけど、
「何らかの形で数値誤差が大きいかもしれない」とか言い出すのよ!もー!
「それを正規化して果たしてどれだけの」やかましいわ、キー!
あたしは一生懸命打ち込んでるの!気温が低いのも売り上げが伸びないのもれっきとした「事実」なの!暖かろうが寒かろうが「事実」に貴賎はないの!
>168
>「ただ1回計算をしただけでは結果の正しさについてほとんど何もわからない」
何回計算させれば気が済むのよ!あたしはデートなの。もう後がないのよ!
もういいわ。ム板に相談した私がバカだった。
ケルビン温度計買ってくるわ。そうすればあたしは幸せになれるのよね?
どこで売ってるの?Amazon?楽天?
…もし気温が0°Kになったらどうするかですって?
そしたらまたセ氏に戻すわ。
0171デフォルトの名無しさん
2008/02/19(火) 21:09:53あなたが観測した気温が1.17549435e-38℃だったとして、
実際には温度計の目盛り線がちょっと曲がっていて
本当の気温はマイナス1.17549435e-38℃だったかも
しれない。でここに出てくる数字だけから判断すると
相対誤差200%なんていう話になってしまう。
売り上げ予想は「事実」ではないでしょ?
入力する気温が氷点下かどうかで
「今月は赤字に転落する恐れがあります」なんて
オーナーに報告しに行かなければならなくなる瀬戸際
にあなたは立っているかもしれない。
真冬日の定義に従って
「今シーズンの暖冬傾向は云々」という文章を
書くのを仕事としている気象庁の中の人は
リアルでそういう状況なんじゃないかな。
0172デフォルトの名無しさん
2008/02/19(火) 21:17:09>相対誤差200%なんていう話になってしまう。
ならねーよ
(273.15 - 1.17549435e-38) 〜 (273.15 + 1.17549435e-38)
だから誤差は0でいいよ
0173デフォルトの名無しさん
2008/02/19(火) 21:22:59誤差の出し方全く分かってないな。
0174デフォルトの名無しさん
2008/02/19(火) 21:39:11だからー、170の使ってる予測式が
気温(セ氏度)×1万円
だったらどうすんの?て話。
物理だけが数学じゃねーぞ。
水と氷だって大違いだぞ。
>173
ここでは相対誤差でなく絶対誤差を使うのが大人のたしなみ。
こうですか分かりません!
0175デフォルトの名無しさん
2008/02/19(火) 21:41:381万円かけたところで誤差なんてないじゃん。
そもそも 「何との」 相対誤差を出したいんだ?
0176デフォルトの名無しさん
2008/02/19(火) 21:49:36四捨五入すれば0円か…その通りだ
真の値と測定値との間の誤差…セ氏度表示で
ってダメ?
0177デフォルトの名無しさん
2008/02/20(水) 15:30:24おでん屋のオーナーもよく聞きなさい。
ベクトルの大小はものの本質ではない。扱うベクトルが小さいからといって天文学者が量子力学者を馬鹿にするような行動は慎まねばならぬ。スケールの大小と精度の長さは区別せねばな。
>161
> 例えば 1 前後のオーダーが普通な時に
> 10^-14 みたいなサイズのベクトルがあったら
> それは多分もの凄い勢いで数値誤差を含んでる。
IEEE754単精度では1〜10^-37ぐらいを同じ精度で計算するのは朝飯前じゃがのう。
>165
> もの凄く小さいベクトルは何らかの形で数値誤差が大きいかもしれないから、
量子力学者のベクトル計算は天文学者より数値誤差が大きいとでもいうのかね?
> 数値誤差のせいで別の方向を向いてるなんてことは普通にある。
で、何に困ってるのかね?おでん屋のお姉ちゃんを見習って温度計を買い換えたらどうかの?ベクトル要素の性質と単位ベクトルの用途を聞かんことにはなんとも答えられんのう。
> どこから0ベクトル扱いにしていい物やら悩む。
これこれ、あくまでも目的は単位ベクトルじゃ。そうじゃったよな? >157
という訳で状況を確認させてもらおう。状況が解らない以上、>157 には最大公約数的な答えしか返ってこないじゃろうな。多目的用途のデータマイニング屋さんのように。
・「ほぼ0」ってどれぐらい?0.01ぐらい?
・ベクトル要素の単位は何?質量?気温?無次元数?IPアドレス?
・ベクトル要素のソースは何?計算結果?計測器?物理定数?
・単位ベクトルを得る目的は?
・当然浮動小数点だよな?
0178デフォルトの名無しさん
2008/02/20(水) 16:11:41よくわからないけど、 1.0 + 1.0 * 10^-37 が正確に計算できるってこと?
0179デフォルトの名無しさん
2008/02/20(水) 17:53:25うむ、この程度の計算なら0.5ulpのハードルはらくらくクリアだな。
0180デフォルトの名無しさん
2008/02/20(水) 18:15:270181デフォルトの名無しさん
2008/02/20(水) 18:48:350182デフォルトの名無しさん
2008/02/20(水) 18:56:37キミは禁断の「真実の値」に迫りたいのかい?
恐ろしいことに、このケースでは仮数部は何桁あっても足りないのだよ…
こうして毎日何人ものプログラマーがBCDの暗黒面に落ちていくのだよ…
0183デフォルトの名無しさん
2008/02/20(水) 19:05:00情報落ちは言い出した人の責任ですかそうですか
>182
1.0 * 10^-37 を「有効数字2桁?」と考えた上での発言だ
…前半の1.0のほうを忘れてたなそういえば
0184デフォルトの名無しさん
2008/02/20(水) 19:21:37おのずと1.0+1.0*10^-37の正体にも気付くさ…
>こうして毎日何人ものプログラマーがBCDの暗黒面に落ちていくのだよ…
やがて彼らは新天地で1÷3に出くわし、挫折の末、戻ってくるのさ…
そして望む/望まざるに関わらず >181 を受け入れて生きていくしかないのだよ…クククッ
0185デフォルトの名無しさん
2008/02/20(水) 19:23:560186デフォルトの名無しさん
2008/02/20(水) 19:54:01知ってるし。だ れ が 1.0+1.0*10^-37の「真実の値」を
知りたいと言ったか。
分数は大小比較が困難だからなー。循環小数について
考えてみようよ。
手始めに0.111...と1.000...をどう正規化するかについて。
0187デフォルトの名無しさん
2008/02/20(水) 20:07:360.900900900900.... = 900/999
0.90909090.... = 90/99
0.9999.... = 9/9 = 1/1
大小比較は通分すればいいんじゃない
0188デフォルトの名無しさん
2008/02/20(水) 20:45:460189デフォルトの名無しさん
2008/02/20(水) 21:17:590190デフォルトの名無しさん
2008/02/20(水) 22:27:51厨房が涌いてるのか?
0191デフォルトの名無しさん
2008/02/21(木) 00:54:42> おのずと1.0+1.0*10^-37の正体にも気付くさ…
うーん、待ってくれ。
「n^-a を適当な基数で基数変換して循環小数になったら
n^-(a+1) の基数変換もまた循環小数である」
…これ、正しいよな?
「整数+循環小数もまた循環小数である」これも確かだよな?
0192デフォルトの名無しさん
2008/02/21(木) 01:30:20> > もの凄く小さいベクトルは何らかの形で数値誤差が大きいかもしれないから、
> 量子力学者のベクトル計算は天文学者より数値誤差が大きいとでもいうのかね?
全体的にオーダーが小さい場合は問題ないと何度も言ってるのに
何でそう言う事言うかね。
> > 数値誤差のせいで別の方向を向いてるなんてことは普通にある。
> で、何に困ってるのかね?おでん屋のお姉ちゃんを見習って温度計を買い換えたらどうかの?
> ベクトル要素の性質と単位ベクトルの用途を聞かんことにはなんとも答えられんのう。
そもそも温度計の話も意味が分からない。
「ほぼ0の値になるとおかしなことになる状況だ」 という状況説明が何もない。
気温(摂氏)で割ってるような式でもあるのか?
それを華氏に直して意味はあるのか?
元の式を変える事ができないなら、
いくらデータを保持する時の尺度を変えようが、
結局もとの形式に変換しないと元の式には適用できない。
数値誤差が増えるだけの愚行。
それができるのは元の式を変える事ができる場合だけだが、
それなら別にデータをコンバートする必要も無く、式を変えればいいだけ。
> > どこから0ベクトル扱いにしていい物やら悩む。
> これこれ、あくまでも目的は単位ベクトルじゃ。そうじゃったよな? >157
例えば解析的には0ベクトルになるはずのものが
数値誤差で非0ベクトルになった場合もあるだろう。
そういう場合に単位ベクトルを得て何の意味があるのか?
意味がないなら0ベクトルになっても構うまい(場合によっては例外投げても構わん)。
0193デフォルトの名無しさん
2008/02/21(木) 01:41:53あんま無いよ、どうせやるなら同次型にして取り扱うが吉
速くて誤差なし
0194デフォルトの名無しさん
2008/02/21(木) 03:16:49おまえ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は計算しない素人評論家もしくはアホ。相手にするな。
0195デフォルトの名無しさん
2008/02/21(木) 05:12:110196デフォルトの名無しさん
2008/02/21(木) 13:03:42>確かに単精度で表される最小数値は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桁)
何か問題あるわけ?
0197デフォルトの名無しさん
2008/02/21(木) 14:10:37float温度[℃]に 3 << 22 を加えた後、3 << 22を引けば整数化される。
1 << 23個の1円玉(約1g)のfloat重さを加算した後で平均をとる。
>>おでんや
x87CWのUM,DMをセットするか例外ハンドラをつけるべき
0198デフォルトの名無しさん
2008/02/21(木) 14:31:53その加算で精度7ケタに丸められることを
194は10^-7程度の誤差と言っているのでは?
0199デフォルトの名無しさん
2008/02/21(木) 15:05:15そんなレベルの議論は>181>183で終わっているように見える
>196
0.5ulpの意味でベストを尽くすこととそれに意味があるかどうか
ということは別の問題だ
1と1+10^-8を区別できない状況で誤差が10^-37程度だなんて
主張したかったらもっと筋道立てて説明しろ
あと
>「1〜10^-37ぐらいを同じ精度で計算するのは朝飯前」
の意味をもう少し具体的に書け
どんな元データからどういう計算をしようとしてるのかを
0200デフォルトの名無しさん
2008/02/21(木) 16:25:410201デフォルトの名無しさん
2008/02/21(木) 17:26:3710進数で1/3=0.3333333333…は3進数では0.1だ。
0202デフォルトの名無しさん
2008/02/21(木) 19:17:18誤差を理解してないな。
0203デフォルトの名無しさん
2008/02/21(木) 21:28:01「よくわからない」ふりして指数域の問題に見せかけつつさりげなく循環小数を忍ばせてIEEE陣営の内ゲバを狙う>>178よ…恐ろしい奴だ。BCD陣営の刺客か?俺も釣られるところだったぜ…
>1 に 10^-37 足したら誤差が 0.0000001 ってどこの電卓だよ! ハライテー
>>196よ、知恵を付けた>>194が「round toward +INFINITYモードだい!」と屁理屈こねて反撃してくる可能性に気をつけろ。0.5ulpの威光も吹っ飛ぶぜ。
>>「1〜10^-37ぐらいを同じ精度で計算するのは朝飯前」
>の意味をもう少し具体的に書け
>どんな元データからどういう計算をしようとしてるのかを
じいさんはそれを>>157に確認してる最中なんじゃねぇの?
このスレの迷走っぷりに呆れて157ももう戻ってこないんじゃないかと。
> 例えば 1 前後のオーダーが普通な時に
> 10^-14 みたいなサイズのベクトルがあったら
> それは多分もの凄い勢いで数値誤差を含んでる。
俺もなぜこの程度の指数域で精度不信に陥ったのか事情を知りたい。
0204デフォルトの名無しさん
2008/02/21(木) 22:32:18回転しないはずなのに微量の回転とか。
0205デフォルトの名無しさん
2008/02/21(木) 22:34:180206デフォルトの名無しさん
2008/02/21(木) 22:40:47馬鹿はすっこんでろw
さらしage
0207デフォルトの名無しさん
2008/02/21(木) 22:54:54機械εが10^-16前後だから
1 前後の値を数百数千数万数十万といった加減算をやってりゃ
10^-14 程度の数値誤差はあって当然。
0208デフォルトの名無しさん
2008/02/21(木) 22:55:190209デフォルトの名無しさん
2008/02/21(木) 23:17:21あのさぁー
あんた誤差とか有効桁の意味分かってないだろ?
>正規数オンリーでも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
0210デフォルトの名無しさん
2008/02/21(木) 23:21:160211デフォルトの名無しさん
2008/02/21(木) 23:36:09>>4の呪いだ.
0212デフォルトの名無しさん
2008/02/21(木) 23:40:080213デフォルトの名無しさん
2008/02/22(金) 00:23:330214デフォルトの名無しさん
2008/02/22(金) 00:26:28まともに教える学校が少ないのかな。
俺も大学の物理実験ではじめてまともにやったよ。
0215デフォルトの名無しさん
2008/02/22(金) 00:44:23最小の単精度正規数
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 の算出根拠を示してください。
0216デフォルトの名無しさん
2008/02/22(金) 01:35:23> 10^-14 程度の数値誤差はあって当然。
「誤差が10^-14」ってどこから出てきた話よ。
> 10^-14 みたいなサイズのベクトル
の要素の誤差が10^-14なのか?もしそうならこれはひどすぎる。
0217デフォルトの名無しさん
2008/02/22(金) 02:19:10それは評判の悪い漸次的アンダーフローの場合だろwwwww
その2数で差を取ったら非正規数になり結局0.0になる。
実際には10^-45という非正規数は見ることは無いんだよ。
大体これは実際に数値計算をしていれば分かること。
プログラム動かして、IEEE754単精度で1.0e-45だのの数字を見たことあるかよ?
要するに、お前がやってるのは、布団海水浴なんだよ。布団の上で水泳ごっこしてるのと同じなんだよ!
規格だけ見てワーワー言ってるから、頓珍漢なことを言うんだ。
2chで遊んでないで、ちゃんとプログラム組んで計算しろ!
0218デフォルトの名無しさん
2008/02/22(金) 02:59:57--
awk 'END {printf("%c%c%c%c", 1, 0, 0, 0);}'|od -t f4
--
私にはIEE754単精度の約1.4e-45に見えるのだが。
0219デフォルトの名無しさん
2008/02/22(金) 07:25:57> > 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) のベクトルの向きは当てにならない。
0220デフォルトの名無しさん
2008/02/22(金) 07:27:03○ O(10^-14) のベクトルは数値誤差と同程度のオーダーのベクトルだから、
0221デフォルトの名無しさん
2008/02/22(金) 11:45:07・10^-37程度
・10^-43ぐらい楽勝
・≒1.4*10^-45
0222デフォルトの名無しさん
2008/02/22(金) 12:12:59ワロタw それは非正規数だしwww 弁当まじりの茶吹いたwwwww
odのf4フォーマットは非正規数をベタで出せてよかったねwww
えらいえらい見えた!見えた!
単精度実数での数値計算の誤差を踏まえた話をしてるんじゃ無かったのかよ。
好きなビット列と好きな浮動小数点フォーマットでへんちくりんな数を出して遊んでるなら、
次はIBMの16進形式で頼むわwwww
”あのさぁー”wwwwww
0.0の次の正規数は約10^-38で、この間隔の方が現実の数値誤差には重要なんですよぉー。
実地であらわれるコンテキスト上の意味も分からないまま、フォーマット規約だけを見て自慰行為に
ふけりまくってるオナニー猿には関係ないだろうがなw
0223デフォルトの名無しさん
2008/02/22(金) 13:35:16単独で取り出せる正の数の最小値はおおよそ1e-38。
一般的に原点近傍の数値間隔といえばこれを指すと思う。
ただ仮数部の桁が7~8桁あるので、その上近傍で仮数部の一番下の桁を見れば
1e-7~8 * 1e-38 = 1e-45 程度の丸め誤差におさまっている。
0224デフォルトの名無しさん
2008/02/22(金) 14:13:39>0.0の次の正規数は約10^-38で、この間隔の方が現実の数値誤差には重要なんですよぉー。
どういう意味で?どこの現実で?
非正規化数が定義された意味をきちんと勉強しろ。
非正規化数がないとか演算速度が重要な実地ならそう書け。
>223
非正規化数って聞いたことない?
聞いたことのない単語が出てきたらググって調べない?
0225デフォルトの名無しさん
2008/02/22(金) 14:35:36実際のところ、あっても嬉しくない。
0226デフォルトの名無しさん
2008/02/22(金) 16:03:15「実地であらわれるコンテキストw」の提示内容によっては同意してもいいぜw。
だがしかし、>>194の抱く「小学生のイメージ」像に矯正が必要な件はこれとは別だぜwww。
0227デフォルトの名無しさん
2008/02/22(金) 18:17:34俺にも詳しく。具体例で。
・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な要素が出現してたりするのか?…
とりあえず全ベクトルの全要素は同じ単位の比例尺度で、ベクトル間要素間の加減乗除何でもアリというシナリオルールにしておこう。温度計(間隔尺度シバリ)の話はとりあえず後回しだ。
0228デフォルトの名無しさん
2008/02/22(金) 19:06:37O(1) の近い値のベクトル同士を減算すれば
おもっくそ桁落ちする。
0229デフォルトの名無しさん
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
0230デフォルトの名無しさん
2008/02/22(金) 20:12:04たとえば基底関数展開したベクトル関数の
ある点の値を取得しようとすると、
対称性のおかげで0ベクトルになる点やその付近で
そういう状況に陥ることがある。
0231デフォルトの名無しさん
2008/02/22(金) 20:17:461/sqrt(2)の間違いな。
0232デフォルトの名無しさん
2008/02/22(金) 23:29:03おまえと>>229は別人なのか、同一人物の自演なのか?www二匹も馬鹿が釣れたのか。
非正規化数の定義された意味を勉強するのはお前のほうだ。
Kahanのサイトに行って、70年代からの苦労話を読み直して来い!
非正規化数を正規化数と同じに考えているところからして、お前は根本から間違っているんだよ。
大体ようやくここ10年くらいでIEEE754の数値Formatは普及したが、丸めやら非正規化数の扱いなんかを
完全準拠している処理系はむしろ例外的だろ。
CELL(SPE)とかGPUの類も非正規化数とかまともにやってないだろ。
SunのSPARCも対応していなくてソフトウェアで対応してたろが。
(この辺は、記憶が曖昧だから検証はマニアさんに任せるよw)
さて、数直線のイメージが理解できないようだから、幼稚園児にも分かるようにより程度を下げて
説明してやる。感謝しろ。
浮動小数点の正規数は、おおよそ対数メッシュになっている。これは指数部に拠るものである。
これは定規で長い線で引かれている目盛りのようなものだ。
さらにこの対数目盛りの間に細かい目盛りが等間隔で引かれている。これは仮数部によるものだ。
0近傍を見ると、最小の正規数までの間には正規数の細かい目盛りは無い。空白地帯がある。
IEEE754規格はここに非正規数を置いているが、この部分は処理系に依存するので、
浮動小数点を学び始めた人は正規数のみのイメージを作るほうが適切だ。
それに、そもそも話は正規数の範囲だったしな。
>>229
お前は桁落ちも知らないで浮動小数点に粘着しているのかwwwwww
subnormalなnumberをいじるより、そのsubnormalなお前の知性を何とかしろ。
俗人のくせに神学に興味を示すのは狂気のプレリュードというが、
数値計算もしないのに浮動小数点にこだわるのも同じだな。abnormalだ。
まず味噌汁で顔を洗って、伊理正夫の数値計算の常識を百回読み返すまでROMってろ!
0233デフォルトの名無しさん
2008/02/23(土) 00:26:170234デフォルトの名無しさん
2008/02/23(土) 01:11:46>お前は桁落ちも知らないで浮動小数点に粘着しているのかwwwwww
ん?この桁落ち、間違ってるのか?
君>>228か?何か気分害したか?直すぞ。
16桁BCDで説明し直すか?
>subnormalなnumberをいじるより、そのsubnormalなお前の知性を何とかしろ。
1e-13ってsubnormalなのか?あ、これ、倍精度な。
0235228
2008/02/23(土) 01:14:16桁落ちは合ってるが、桁落ちを今知ったような、
あるいは桁落ち誤差が完全に頭から抜け落ちていたような
雰囲気に対して煽ってるんだろう。
0236デフォルトの名無しさん
2008/02/23(土) 01:57:14>完全準拠している処理系はむしろ例外的だろ。
何いきなり抱き合わせで完全準拠を求めてんですか。
そんなに価値がないのならIEEE754rで削除してもらうか。
>SunのSPARCも対応していなくてソフトウェアで対応してたろが。
プログラマならまずシステムとして対応しているか&使い物に
なるかを気にするべきでハード実装かどうかはそのあとでしょ?
>浮動小数点を学び始めた人は正規数のみのイメージを作るほうが適切だ。
同意
>それに、そもそも話は正規数の範囲だったしな。
そうだっけ?
>subnormal
まで読んだ
0237デフォルトの名無しさん
2008/02/23(土) 03:57:160238デフォルトの名無しさん
2008/02/23(土) 11:45:05サブプライムとかけてたのね。
ふーん
0239デフォルトの名無しさん
2008/02/23(土) 12:23:18>幼稚園児にも分かるようにより程度を下げて
>説明してやる。感謝しろ。
ご協力感謝します。>>194も喜んでおります。
>浮動小数点の正規数は、おおよそ対数メッシュになっている。
>これは指数部に拠るものである。
ふむふむ、すると「対数メッシュ」の間隔は最小値近辺で大体10^-38、1付近で大体10^0ですね。
>さらにこの対数目盛りの間に細かい目盛りが等間隔で引かれている。
>これは仮数部によるものだ。
ふむふむ、すると「細かい目盛り」の間隔は最小値近辺で大体10^-45、1付近で大体10^-7ですね。
さて、>>232さん、ここでご指導を仰ぎたいのですが、
>>194
>0近辺では目が細かくて10^-37程度だが、
>1の近辺では目が粗くなっていて10^-7程度でメッシュが切られている。
の申す「メッシュw」とやらはどちらに分類しましょう。
「対数メッシュ」?「細かい目盛り」?
「これ以上細かい数値を足し引きしても、近場のメッシュに寄せられてしまう」
とか申しておりますので「細かい目盛り」にしましょうか。
ということで>>194君、「10^-37」には修正が必要だよ。
はい、本日の「小学生のイメージ」矯正終了。
0240デフォルトの名無しさん
2008/02/23(土) 22:23:13これって常に可能なんだっけ?
(任意の循環小数には有限小数に変換できるような基数が必ず存在する?)
もしかして有理数 m/n として表されるなら n を基数にすればいいとかそんな感じかな?
n が素数でない場合はもうちょい工夫できそうな?
0241デフォルトの名無しさん
2008/02/24(日) 01:09:2189.999… == 90.0 == 90.000…
0242デフォルトの名無しさん
2008/02/24(日) 09:56:030243デフォルトの名無しさん
2008/02/24(日) 09:59:20・有理数 m/n は n**-1 のm倍
・有限桁o進数は o**p の整数倍(pは有限の整数)
・mは整数かつ-1は有限の整数なので、m/n は有限桁n進数で表現可能
>n が素数でない場合はもうちょい工夫できそうな?
・(n*x == o**y)を満たす整数x,yが存在するならoは何でも良い
0244デフォルトの名無しさん
2008/02/24(日) 10:59:08そこまで言ってたらわかってると思うが、m/n = 0.m (n進数)だろーがw
0245デフォルトの名無しさん
2008/02/24(日) 11:02:550246デフォルトの名無しさん
2008/02/24(日) 11:05:11143/7 は 0.143(7進数)ですかそうですか
0247デフォルトの名無しさん
2008/02/24(日) 11:11:07n 進数で 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)
だな。
0248デフォルトの名無しさん
2008/02/24(日) 11:28:09余りのパターンには限りがあるから、
少なくとも 0 以外の全ての余りが出現したら
あとは循環するのみだから。
そう考えると、1/素数はかならず循環小数になる以上、
素数 p は必ず何らかの (n-1)...(n-1) の約数になるのか。
なんか面白いな。
0249デフォルトの名無しさん
2008/02/24(日) 11:29:18すべての循環小数は有理数
すべての有理数はp/qの整数比で表せる
すべての循環小数は基数変換で(ry
0250デフォルトの名無しさん
2008/02/24(日) 11:34:101/2
1/5
0251デフォルトの名無しさん
2008/02/24(日) 11:34:3010 進数だと 10^x は素因数が 2 と 5 しかないから、
2 と 5 以外の素数は全てそうなる。
0252デフォルトの名無しさん
2008/02/24(日) 11:40:41循環の周期は p - 1 の約数のうち p の桁数以上のものになるから、
最大で 9 が 2^32582657-2 個、最小でも 9808358 個の 9 が並ぶことになるのか。
果てしないな。
0253デフォルトの名無しさん
2008/02/24(日) 11:41:380254デフォルトの名無しさん
2008/02/24(日) 11:50:380255デフォルトの名無しさん
2008/02/24(日) 11:52:40循環小数の有理化に関するレスだよね。
>0.0...1 0...1 0...1 ... を (n-1)...(n-1) 倍すると 1 になるので、
この時点で、0.(n-1)...が1になる説明をまた>>247の頭から繰り返さなければならないわけで
0256デフォルトの名無しさん
2008/02/24(日) 11:57:40それは別な形で証明できるから問題ない。
0257デフォルトの名無しさん
2008/02/24(日) 14:14:510258デフォルトの名無しさん
2008/02/24(日) 14:33:140259デフォルトの名無しさん
2008/02/24(日) 15:38:290260デフォルトの名無しさん
2008/02/24(日) 15:41:440261デフォルトの名無しさん
2008/02/24(日) 15:46:26でも、こういうのでは表しづらい無理数もあるかと思う。
解析解がない(数値解しか無い)ことが証明されている
方程式の解とかは、その方程式自体を中に保持したオブジェクトを使えるかもしれないけど、
その値をさらに別の式に組み込むと・・・とか考えていくと
無理がでてきそうな気がする。
0262デフォルトの名無しさん
2008/02/24(日) 15:58:15無理数の難しいところはそういう問題じゃないんだ、まずはカントールの対角線論法を理解してほしい。
ここで、自然数を列挙する縦方向と、無限小数の桁を列挙する横方向に広がった二次元の表ができ、無限小数に自然数が対応できず
自然数よりも実数の集合の方が個数が多いとなる。
問題は、これが意味するところで、Haskellなどを弄ってみると分るのだが、
この無限につづく少数の列には、後出しジャンケンのような要素を含むことが可能なのだ。
適当な実数を意味する関数 char f(int i) を考える i が桁を示し、戻り値が 0-9 までとする。
引数 i を指定すると、関数 f は常に同じ値を返すとする、この条件だけなら、この関数 f は getc を含む関数が作れることがわかると思う。
一回よんだら以後その値を使い続ければ、関数 f は常に同じ値を返すから。
そして、それは際限なく続けられる、少数は無限にあるので。
0263デフォルトの名無しさん
2008/02/24(日) 17:35:14言い訳:「どこかで誰かのgetc()がクレジットカード番号を返す可能性がある限り、私共に責任はありませんっ」
ううむ、でこれ、自然数の集合では難しい話なの?
0264デフォルトの名無しさん
2008/02/24(日) 19:01:31任意の有限個の記号からなる数値定義
(√(12345/678.9)、x^123456789+...+3=0の解、etc.)
は全てひっくるめても加算無限個しかない。
つまりそういう方法では決してあらわせない無理数が
無限に存在する。
任意の無理数をあらわすには常に無限桁の入れ物が必要。
(任意の自然数をあらわすのはそれに応じた十分な
長さの有限桁の入れ物でいい)
0265デフォルトの名無しさん
2008/02/24(日) 19:22:020266デフォルトの名無しさん
2008/02/24(日) 20:33:14無限に存在とか考えないほうがいいかもしれない、特に「存在」
これ数学上の定義で自分たちの意識している「存在」の概念とはかけ離れた所があるから。
結局のところ「カントールの対角線論法」では、とりあえず実数の利用者に実数を全部ならべさせておいて
その後から、しめしめとその利用者が列挙しなかった実数を挙げて、ほら並べられなかったダメじゃんという論理になっている。
実際に実数を実装しようと思うと同じ事が起こるというだけ、それ以上でもそれ以下でもない。
これは意識したすべての実数については、表現可能だが利用者が意識していない実数についてまでは実装できないという事。
たとえば、純粋抽象クラスを実装する場合、その中身がかかれてなくてもそれを利用するコードは書ける。
しかし実際には純粋抽象の中身を書いたクラスを使わないと利用できない、具体的なコードは「後からでも書けるよ」というのと似ている。
0267デフォルトの名無しさん
2008/02/24(日) 20:57:430268デフォルトの名無しさん
2008/02/24(日) 21:39:040269デフォルトの名無しさん
2008/02/25(月) 01:10:400270デフォルトの名無しさん
2008/02/25(月) 06:40:10任意の実数と言わずとも任意の有理数が表現できたらうれしいですけど。
「無限に伸びるバイト列」かあ。
多倍長計算のライブラリとかで、循環小数をきれいに扱えたららいいなあと
思うんだけど、どうなんでしたっけ。
0271デフォルトの名無しさん
2008/02/25(月) 16:18:51数式演算すればいいんじゃね?
Mathematicaと言わず、HP49Gくらいでいいじゃん。
0272デフォルトの名無しさん
2008/02/25(月) 18:57:530273デフォルトの名無しさん
2008/02/25(月) 20:15:51言い換えてみる。
最初から無限長のバイト列(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
うーんなんだこりゃ
0274デフォルトの名無しさん
2008/02/25(月) 20:20:311/3*1/3 = 1/9 = 7/(2^6-1) = 0.000111000111...(2)
0275デフォルトの名無しさん
2008/02/25(月) 20:43:36実際の問題で扱う値ってある程度限定されてるから、
その実際に扱う値さえ表現できればそれで現実的には十分だと思う。
ただ、それでも無理な事もあるかもしれないけどね。
0276デフォルトの名無しさん
2008/02/25(月) 23:22:17>周期aの数と周期bの数を掛けたら結果の周期はa*bかその約数
なるほどそんな性質が。
>(結局は分数で扱うのが一番簡単そうに見えるのが)
例えば小数を分数に変換する、みたいなプログラムがたまにありますけど
有限な小数しか入力できないというのは片手落ちかなと思って。
周期が短い循環小数ぐらいはなんとかしたいかなーと。
例えば 1/7 の循環小数を入力したら、ちゃんと 1/7 を答えてくる、みたいな。
0277デフォルトの名無しさん
2008/02/25(月) 23:43:37循環小数を入力する書式さえ決めれば、どうにでもなるかと
循環部分を括弧で囲む 0.[142857] とか、循環する桁数を付ける 0.142857, 6 とか
142857/999999 で約分して 1/7
0278デフォルトの名無しさん
2008/02/26(火) 00:40:17どこの分野でも測定機の精度が八桁もあったら高性能といわれる
実数をきちんと表現しても元データの誤差以上にはならないから
現実的には計算が遅くなるだけでなんの意味もなさないでしょ
役に立たたないことそんなに力説しないでもいいんじゃない
>276
循環小数なら整数演算だからスレ違いでしょ
0279デフォルトの名無しさん
2008/02/26(火) 00:45:040280デフォルトの名無しさん
2008/02/26(火) 00:58:12可算な集合の特性は適当な集合について、これをコンピュータで言う所の class でいうと
それは隣の要素を知るためのインターフェイスがあるという事だよ。
適当なコンテナオブジェクトがあるとき、その内容を列挙する気がないのなら別に列挙インターフェイスをつけなくてもいいんだよ。
それが不可算無限個を扱うという事、作れないって事はない、それは機能が制限されたライブラリとなっているだけだから。
0281デフォルトの名無しさん
2008/02/26(火) 01:55:10なるほど。
ちなみに 142857/999999 というのは等比級数の無限和ですかね?
0282デフォルトの名無しさん
2008/02/26(火) 05:33:20x = 0.[142857]
1000000x = [142857] = 142857.[142857]
1000000x - x = 142857
x = 142857/999999
0283デフォルトの名無しさん
2008/02/26(火) 09:22:43なるほど。等比級数を持ち出すまでもないですね。ってゆうか確か高校で等比級数の和を
教えるときは同じような変形をするんだったかな。
浮動小数点の数値を整数分数に直してその後は分数として計算したら、精度的には
うれしい場合もあるかな?
0284デフォルトの名無しさん
2008/02/26(火) 10:28:18>循環部分を括弧で囲む 0.[142857] とか、循環する桁数を付ける 0.142857, 6 とか
914314.3143...とかどうしよう。9[143]XX.0とかでいいか。
無理数か循環小数かよく解らない数はどう表そう。
オイラーの定数γとか。
0285デフォルトの名無しさん
2008/02/26(火) 11:51:530286デフォルトの名無しさん
2008/02/27(水) 13:06:33ビット表現に×2^nと正規化が出てきたら文字通り
浮動小数点だと言ってみるテスト
(まあ現在普通に浮動小数点といえば
誤差含む数を扱うためのものだが)
>>280
実際のところ実数が不可算無限個あるって性質は
無視していいよね。
数学上は可算無限個の中に含まれない実数を
作り出すこと自体無理だし、
実用上は誤差を考えれば有限桁ですむし。
>>284
表そうも何もどういう循環小数か分からない時点で
0287デフォルトの名無しさん
2008/02/27(水) 15:46:50有限のメモリーの中に無限を置けないのは、可算・非可算問わず事情は同じで
有限のメモリーの中"無限"という文字列が取り扱えるという事情も可算・非可算問わず事情は同じかと。
0288デフォルトの名無しさん
2008/02/27(水) 16:28:26真剣に無限どうこう考えてるわけじゃないでしょ。
0289デフォルトの名無しさん
2008/02/27(水) 20:29:04http://pc11.2ch.net/test/read.cgi/db/1175091880/
0290デフォルトの名無しさん
2008/03/02(日) 01:20:43アルフ0 の一つ上は実数でしたっけ(連続体仮説?)
0291デフォルトの名無しさん
2008/03/02(日) 11:10:14>「連続体仮説は証明も反証もできない命題である」ということが明確に証明されている。
0292デフォルトの名無しさん
2008/03/26(水) 00:01:38>(任意の循環小数には有限小数に変換できるような基数が必ず存在する?)
>もしかして有理数 m/n として表されるなら n を基数にすればいいとかそんな感じかな?
>n が素数でない場合はもうちょい工夫できそうな?
>>243
>・(n*x == o**y)を満たす整数x,yが存在するならoは何でも良い
nからよりコンパクトなoを求めるアルゴリズムが思い浮かばないよぅ。
素直にnを素因数分解するほうが近道か・・・
0293デフォルトの名無しさん
2008/03/26(水) 23:33:470294デフォルトの名無しさん
2008/04/25(金) 22:58:05ttp://keisan.casio.jp/has10/Menu.cgi
公開数日で、はてブ500ブックマーク突破。
有効桁数50桁。これ、BCDかなあ…。オリジナル精度の浮動小数点数かも。
プロの電卓屋が考えた「独自の桁数可変型演算システム」とやらの詳細が知りたいぜ!
君たちの大好きな 1 / 3 * 3 もちゃんと 1 になるぞ!
0295デフォルトの名無しさん
2008/04/26(土) 00:10:49確かカイジでは
イヨイヨ ミゴロシ って読んでた気がする。
1414 3564
>>294
CPUは、繰り上がりフラグがあるから、足し算なら無限にできる。
掛け算を因数分解して有効桁の範囲で計算したあと足し合わせればいいわけで。
または文字で計算。まあ速度的にないと思う。
0296デフォルトの名無しさん
2008/04/26(土) 12:32:290297デフォルトの名無しさん
2008/04/26(土) 15:47:061. 4 1 4 2 1 3 5 6
が一般的だろうな。
0298デフォルトの名無しさん
2008/09/25(木) 14:29:48http://pc11.2ch.net/test/read.cgi/tech/1222048909/
0299デフォルトの名無しさん
2009/01/05(月) 07:38:270300デフォルトの名無しさん
2009/01/31(土) 16:44:130301デフォルトの名無しさん
2009/02/15(日) 22:19:06ところで、Boostの分数はいずれ多倍長整数をサポートするとか。
精度ってどうなのよ?
0302デフォルトの名無しさん
2009/02/15(日) 22:27:458087の頃からある。
0303デフォルトの名無しさん
2009/02/15(日) 22:50:46ほへぇ〜。だったらsinテーブル作って引くよりそっち使った方が早いのかな?
0304デフォルトの名無しさん
2009/02/15(日) 22:55:46んなわけないだろ
8087系統は愚直にマクローリン展開の公式を実行している
だけだからクロック数はすごいぞ
0305デフォルトの名無しさん
2009/02/15(日) 23:06:120306デフォルトの名無しさん
2009/02/15(日) 23:18:07そういうことを自分で調べずに、このスレで何をするつもりなの?
0307デフォルトの名無しさん
2009/02/16(月) 07:46:44乗算器が速くなかった時代では級数展開やってない。
CORDICでぐぐれ。
0308デフォルトの名無しさん
2009/02/16(月) 19:05:38実装って複数あるだろうから平均的な動作を知りたくてね。
やろうと思えば、アセンブリ命令レベルで組み込まれてる訳だから
並列化した回路を実装してある物もあるかもしれないじゃん。
でも、そういう情報は古すぎてかあんまりWebにゃ載ってなくてねぇ。
0309デフォルトの名無しさん
2009/02/17(火) 00:43:56ほう昔はこんな方法使ってたのか
今じゃRadix16だからなー
0310デフォルトの名無しさん
2009/02/17(火) 16:44:540311デフォルトの名無しさん
2009/02/18(水) 23:04:32floatからニュートン法でやるしかない?
0312デフォルトの名無しさん
2009/02/18(水) 23:44:15あるところにはあるよ。
ttp://docs.hp.com/en/B3921-90010/rsqrt.3M.html
0313デフォルトの名無しさん
2009/02/19(木) 00:17:31HPのWS?の関数じゃあなあ
0314デフォルトの名無しさん
2009/02/19(木) 00:22:080315デフォルトの名無しさん
2009/02/19(木) 19:55:09なんちゃらオーダー見たいな機能で並列実行とかされないの?
暇そうに遊んでるレジスタが気になって仕方ない。
0316デフォルトの名無しさん
2009/02/19(木) 20:18:35>>SSE用レジスタっていっぱい
だからOOOが効くとでも思ってるのか?
0317デフォルトの名無しさん
2009/02/19(木) 21:00:28結局多項式でぐらいしか意味は無いのか。
もったいねぇ。
0318デフォルトの名無しさん
2009/02/19(木) 21:04:49おまえ、全然分かってないな
多項式だって a(b+x(c+x(d+x)))をSSEに置き換えただけでは
全然効果ない
0319デフォルトの名無しさん
2009/02/19(木) 22:01:15そうなんけ?2〜3倍早くなったことはあったけど。
じゃああのレジスタ群は何に使うのよ?
0320デフォルトの名無しさん
2009/02/19(木) 22:04:500321デフォルトの名無しさん
2009/02/19(木) 22:53:03単に置き換えただけでも効果あるぞ。
FPUはfxchとか駆使してもOoOし切れないことが多い。
0322デフォルトの名無しさん
2009/02/19(木) 23:01:060323デフォルトの名無しさん
2009/02/20(金) 02:56:34icc持ってないから分からないんだけど。
0324デフォルトの名無しさん
2009/02/20(金) 04:00:230325デフォルトの名無しさん
2009/02/20(金) 04:13:50それとも-msse, -O3とは別の意味で、オプションとか組み込みキーワードで精度を選択できるのか?
0326デフォルトの名無しさん
2009/02/20(金) 14:15:090327デフォルトの名無しさん
2009/02/20(金) 15:17:11ただでさえサポートしてるプロセッサはx86以外ほぼ皆無だし。
実際問題精度よりスループットのほうが重視されてるからな。
スループットがあればFFTによる多倍長演算も容易になる。
0328デフォルトの名無しさん
2009/02/20(金) 17:19:200329,,・´∀`・,,)っ-○◎●
2009/02/20(金) 22:08:20MSコンパイラがlong double = doubleにやっちゃってるし。
0330デフォルトの名無しさん
2009/02/20(金) 22:56:00出来るだけ64ビットに演算誤差を伝播しないようにするインテルの親心というか・・・
0331デフォルトの名無しさん
2009/02/20(金) 23:02:41128ビットじゃないけど、金融・財務とか科学の計算でも普通は多く50桁*2程度あれば十分だと思うけど。
暗号とかエンコード用途なら、スループット以前の問題でFFTをハードとしちゃうだろうし。
というか、IEEEは早いところ16ビット小数を定義して実装して欲しい・・
0332,,・´∀`・,,)っ-○◎●
2009/02/20(金) 23:14:270333,,・´∀`・,,)っ-○◎●
2009/02/20(金) 23:26:23COBOLみたいな10進で扱う言語がわざわざ使われてるわけで。
かつ、Javaへの置き換えとかはBCD専用クラスとか作ってやってるわけで
それにしてもAMD64がBCD演算命令を整理(廃止)する一方で今更POWERが実装とかアフォかとヴァカかと
どうせ高級言語ごしでやるんだから命令ニーモニックレベルでのサポートも原則的には要らない訳なんだが。
0334デフォルトの名無しさん
2009/02/21(土) 00:19:22BCDとかの実装の問題だとしても、ソフト上でintでいいんじゃないの?
例えば、高々100桁程度でかつ100桁の固定精度で十分なのに、どこにFFT使うんだ?
廃止かどうかというのは、当時の貧弱なハードや産業界の需要によって機能をつけたわけで・・・
浮動小数は、実際は指数部分が重要なわけであって、仮数部分は低精度でいいってことは分かってるのか?w
仮数の精度は低いが、たとえ8ビットだとしても高精度と比較してもグラフの形状はほぼ同じ形状になる。
高精度が欲しいなら小数なんか使わないでBCDにすればいいんじゃないの?
0335デフォルトの名無しさん
2009/02/21(土) 00:37:55SSEというのはスカラー演算はおまけで、ストリーム用途(といってもたった16バイトだけど)が本命じゃなかったのか?
インテルはサーバ用CPUの方に目がいっちゃってるから、PC用ではAMDの方がやる気あるよねって言うのは同意するけど。
でもインテルは組み込みやサーバーや携帯市場にもいってみたけど活路は無く、一方でPC市場を放棄したりして一体何やりたいんだろうね。
一番活躍できそうなネットブックは、MSが仕様作ってるからインテルが主導権握ってる市場じゃないみたいだし、インテルには将来の展望というか何やりたいのかさっぱり見えてこない。
小数とは関係ないけど。
0336デフォルトの名無しさん
2009/02/21(土) 00:59:08高い精度で高速な浮動小数点演算を必要とする需要ってのもいくらでも存在するぞ
最終段の出力が全てではないわけで
ま、そのために80ビットてのも痛し痒しだって流れには同意するけどね
0337デフォルトの名無しさん
2009/02/21(土) 01:22:45それも一応考えてみたんだけど、浮動小数を他と比べるとき、仮数(有効精度)で比べると10進上の扱いや演算誤差はBigDecimalの方が分があるから浮動小数は入らないとなるけど、
指数では当然だけど浮動少数の方にメリットがあって、少ないビットで巨大な数2.1 * 2^1022 などを表現できることに利点がある。
これはBCDでは桁数分の配列(上と同じなら1000以上)を用意しないとだめだし、もしBigDecimalだとしても実装が val * 10^exp とするならそれは浮動少数でしかない。
つまり浮動小数は、極端に言えば仮数は指数がゼロか否かの1 0のみでよくて仮数に意味はなく指数が命ってことになる。
すると8ビットでもいいじゃないのって事がわかってくる。深く考えてみれば分かるよ。
それなのに仮数の精度がどうとかこうとか言うのは、よくいるだろ?財務アプリなのにint,longで金額を保持しちゃう奴。アレと同じだろ。
もし精度が欲しかったり演算誤差を気にするなら、プリミティブ型なんか使わずちゃんとBCDつかったりソフト上で多倍長を実装するべきだと思うよ。
0338デフォルトの名無しさん
2009/02/21(土) 01:36:230339デフォルトの名無しさん
2009/02/21(土) 01:56:44関数電卓(手元にあるのはカシオだけど)の説明書では10桁を有効桁にして、内部では15桁でやってるとかいてある。
たぶん実際のこと知らないのに、どっかの三流起者とか○○研究所研究員が書いた記事を鵜呑みにしちゃって、演算誤差が出やすいとか思い込みしてたんじゃないの?w
0340デフォルトの名無しさん
2009/02/21(土) 12:19:2710^15程度でいいなら倍精度の53ビットあれば十分だろ。
更に言うなら64ビット整数と10^nの固定スケールで表してもいい。
なおさら機種依存のfp80なんて使う必要ねーよ。
むしろ【浮動】小数で扱う必要がない。
ジンバブエドルでも扱うのか?www
0341デフォルトの名無しさん
2009/02/21(土) 12:25:43ところで財務アプリなんか触ったことないがなぜlongで保持しちゃいけないんだ?
_int64で持てってこと?
0342デフォルトの名無しさん
2009/02/21(土) 12:59:31君の妄想はこの程度しかできないんだろうけど、もっと現実に即して考えないと後々損することになるかもしれないよ。
80ビット精度は上にもあるように64ビット(IEEE定義のdouble)に演算誤差を伝播しないためにインテルが保障を確保するために必要とする精度であって、ジンバブエドルとはまったく別の話。
英語のウェキの方が詳しいが、IEEEの浮動小数点数の定義も含めて勉強しなおしたほうがいいんじゃないか?
0343デフォルトの名無しさん
2009/02/21(土) 13:02:00longで持ってもいいけど、プリミティブかオブジェクト(インスタンス)かの違い。
インスタンスで持つとオブジェクト指向の方法論が使えて何かと便利ってこと(他にもあるけど)。
0344デフォルトの名無しさん
2009/02/21(土) 14:18:45いや、普通に long じゃ桁あふれするだろ。
0345デフォルトの名無しさん
2009/02/21(土) 14:29:500346デフォルトの名無しさん
2009/02/21(土) 15:10:35金融演算知らないシッタカは黙ってな。IEEE浮動小数なんて使わねーよ。
整数四則演算より80ビット浮動小数の方が速いような変態CPUなんてどこにあるんだと。
fp80をかろうじて使える当のIntelすら整数(固定小数)のほうが圧倒的に速い。
0347デフォルトの名無しさん
2009/02/21(土) 15:15:02結局適材適所だよね。
0348デフォルトの名無しさん
2009/02/21(土) 15:17:40金融とか財務とかのアプリで、どこに浮動小数を使う場面があるんだ?
整数と浮動小数(IEEE)で全然違うフォーマットなのに比べてみたり、一体いつの時代で比較してみたり速いとか遅いと基準もなく比べたりしてるんだ?
どうせ「IBM」という肩書きの3流記事を読んで頭おかしくなっちゃってるんだろ。知ったかはお前の方だな。カスは黙ってろw
0349デフォルトの名無しさん
2009/02/21(土) 15:19:210350デフォルトの名無しさん
2009/02/21(土) 15:23:050351デフォルトの名無しさん
2009/02/21(土) 15:23:10あのね、ベンチマークなんかいくらでも都合よくプログラム書ける訳よ。
インテルがtmpegエンコ―ダに賄賂(支援)してインテルCPUに都合よくプログラムしてるって話は有名だろw
例えば統計の数値使って官僚とか経営者を騙すとかたまに聞くだろ。つまり、IBMとか東大とか肩がきってのはそういうの同じ(その統計もある意味あってるから別に否定はしないけど)
頭弱いおサルちゃんはどの分野にいっても「コロっと」騙されちゃうんだろうけど(笑)
0352デフォルトの名無しさん
2009/02/21(土) 15:26:04賄賂?妄想を既成事実にしないで下さい
0353デフォルトの名無しさん
2009/02/21(土) 15:35:51物理的に32bit×4ないし64bit×2のSIMDに最適化された演算器しか載ってないし。
なにより今時スタックな時点で論外。
他人のベンチがどうとか以前に自分で計測してみろよ、ゆとり
0354デフォルトの名無しさん
2009/02/21(土) 15:42:52PBRとかわざわざ固定小数で計算してるとは思えないな。
0355デフォルトの名無しさん
2009/02/21(土) 15:47:470356デフォルトの名無しさん
2009/02/21(土) 15:52:160357デフォルトの名無しさん
2009/02/21(土) 15:53:210358デフォルトの名無しさん
2009/02/21(土) 17:43:02物理的にはFPUユニットとSSEユニットが載っているわけで、間違って覚えたりしてないでインテルのマニュアルをあとでこっそり読み直したほうがいいんじゃね?
鼻高々に知ったかばかりしてると、もっと大きな恥かくことになるからw
0359デフォルトの名無しさん
2009/02/21(土) 20:48:140360デフォルトの名無しさん
2009/02/21(土) 20:51:37それ何?
0361デフォルトの名無しさん
2009/02/21(土) 20:56:53銀行で使ってるの見たことないんだけど
使ってる銀行ってあるの?
0362デフォルトの名無しさん
2009/02/21(土) 21:13:02つ Banker's Rounding
0363デフォルトの名無しさん
2009/02/21(土) 21:55:450365デフォルトの名無しさん
2009/02/21(土) 23:45:37いや、シミュレーションの世界では早ければ早いほどよい。
0366,,・´∀`・,,)っ-○◎●
2009/02/22(日) 00:04:04「論理的」だろ。物理的に別ユニットっていつの時代のCPUだよ。
現行のCore MAなんかではx87とSSEは共用だよ。
大別してFADDがSIMD FP Adder, FMULがSIMD FP Multipler。
あとDividerとかFP ROMが同じポートにぶら下がってるかな
まあ、fpスタック経由でしか80bit精度の演算ができない(XMMレジスタは使用できない)時点で
実効スループットは察して下さい。
>>364
英語版にしろよ。それPentium 4までしか載ってなくね?
0367,,・´∀`・,,)っ-○◎●
2009/02/22(日) 00:19:58IntelR 64 and IA-32 Architectures Optimization Reference Manual
SKU #248966
ゆっくり読んでいってね!
SIMD FPユニットとx87用ユニットが別なのってIntelだとPentium IIIが最後だと思うんだが。
あんときはSSEは単精度までのサポートだったから共有化の機運がなかったのかな?
0368デフォルトの名無しさん
2009/02/22(日) 01:07:42結局お前か。お前のウンチクなど聞きたいわけではないわ。
名無しで潜伏してないでちゃんと名を名乗れ。ニートwww
0369デフォルトの名無しさん
2009/02/22(日) 01:14:17スループット云々よりもメイン・メモリとのレイテンしが改善されないから、もう頭打ちなんじゃないの?
結局fetchに頼るのみなら、80ビットやFPのフォーマットや機構(スタックとか)の問題じゃないし。
SSEは、レイテンシを考えると、ガバッと持ってくるようにするために16バイトとかケチってないで32バイト(double*4)でよかったんじゃないかと思う。
0370,,・´∀`・,,)っ-○◎●
2009/02/22(日) 01:24:09は?ww
被害妄想いいかげんにして。
ウェキは吹いたwww
0371,,・´∀`・,,)っ-○◎●
2009/02/22(日) 01:25:14>SSEは、レイテンシを考えると、ガバッと持ってくるようにするために16バイトとかケチってないで32バイト(double*4)でよかったんじゃないかと思う。
それがAVXなんだけど・・・。
0372デフォルトの名無しさん
2009/02/22(日) 01:38:55> 整数四則演算より80ビット浮動小数の方が速いような変態CPUなんてどこにあるんだと。
Netburstだと、整数の乗除算よりFPの乗除算の方が速い
0373,,・´∀`・,,)っ-○◎●
2009/02/22(日) 01:40:14あと、Core MAやAMD K8以降ではL1キャッシュの1ラインは64byteなんで。
シーケンシャルリードなら同一ラインの後続ブロックもL1から続けて読めるから
>>369の想定する用途では全然問題ないと思うんだが。
シーケンシャルとか定ストライドなどのパターン性のあるアクセスなんかだと
いまのCPUではキャッシュ自体が自動的に先読みしてレイテンシ隠蔽してくれる機会がある。
ベクトル長伸ばしちゃうとそれはそれで厄介だぜ
座標を表すのですら、単精度だとx, y, zであと1要素分余らせたりすることが珍しくない。
現状のSSEの実装ではpermute演算はそこまで強力じゃないので128bitが妥協点だったのでは?
0375デフォルトの名無しさん
2009/02/22(日) 02:06:22>現状のSSEの実装ではpermute演算はそこまで強力じゃないので128bitが妥協点だったのでは?
だからさ、その時代その時代に合わせたお前のウンチクなんて興味ないのよ。
3年後には全く逆のこといったりするだろ。
主張がコロコロ変わるからいつまでたってもお前は誰からも認められないんじゃないの?ニート君w
0376デフォルトの名無しさん
2009/02/22(日) 02:11:16なんつーか、お前の浮動小数点の理念とか信念なんか聞きたいわけじゃないわけ。
fp80の精度が必要な人もいれば、高速な方がいいって人もいるわけで、インテルの洗脳されちゃってるお前の信念を押し付けないでくれないか?
それも信念がコロコロ変わるんだろ。お前だって嫌だろ。草かみたい選挙が近くなるたびに草か信者が家に押しよせてきたら・・・
0377デフォルトの名無しさん
2009/02/22(日) 02:14:200378,,・´∀`・,,)っ-○◎●
2009/02/22(日) 02:15:58言わねーよ池沼
10年前のPentium IIIではSIMD演算ユニットは単精度2並列分のスループットしか得られなかったが
それでも10年前なりの技術水準でできるだけのことはやってた。
それを文句言う奴はいねーよ。
0379,,・´∀`・,,)っ-○◎●
2009/02/22(日) 02:18:03IntelはAMD64のコピー実装だし。
Intel信仰がどうとか言ってることがちゃんちゃらおかしい。
ウェキ(笑)
0380デフォルトの名無しさん
2009/02/22(日) 02:21:28よく分からないんだけど、bitwiseの観点からみれば整数四則もFP四則も同等でしょ。
両者に差が出るようところはどこにあるの?
整数もFPも、10進に直したり結果を出力して視覚化するところに差があるというなら、本質的には君>>346が言うところの四則の計算とは関係ないわけで・・・
0381,,・´∀`・,,)っ-○◎●
2009/02/22(日) 02:22:34キャッシュのローカリティヒントなんて同じIntelでも、Pentium 4とCore MAでも動作が違う。
たとえばPen4ではprefetcht0を使ってもL1にはデータは置かれないがCore MAでは置かれる
だがキャッシュのヒット率なんて演算結果に直接影響しないだろ?
キャッシュローカリティで演算結果が変わるようなプログラム書いちゃう人はそれはそれで問題だが?
0382,,・´∀`・,,)っ-○◎●
2009/02/22(日) 02:30:31単精度と倍精度はIEEE754の規格にも入っててPowerPCやARMでも使えるんですが。
FP80(笑)
0383デフォルトの名無しさん
2009/02/22(日) 02:31:02当時の水準でFPUとSSEは分離してたのが最良といいつつ、何でさっきの主張では「FPUはイラン!」とか文句言っちゃうんだ。
どうも当時の技術水準とその互換性「FP80」に文句あるみたいだけど、そんなに演算誤差を気にしなくてもいいプログラムをしてるのか?
お前みたいな奴が「古い技術はイラン!」とか言って互換性を破壊していく元凶なんだよな・・・・そういうの世の中に出てみると分かるけど、即効で嫌われるから。
日本男児の固定観念もいいけど、英語の発音では一応「ウェキ」といってるようだが・・・なんかお気に入りのようだなw
0384デフォルトの名無しさん
2009/02/22(日) 02:32:170385デフォルトの名無しさん
2009/02/22(日) 02:36:00インテル信仰とは、インテルのx86命令コード体系のことだと思うんだが・・・?
実際今の64ビット向けとかはAMD64の定義をコピーしてインテルが使ってるんだし。
もしかして団子は、会社としてのインテル(INTEL入ってる!)にあこがれてるのか?
よく読んでみると所々に穴があるよね。団子はw
0386,,・´∀`・,,)っ-○◎●
2009/02/22(日) 02:38:42Pentium IIIのSSEはたかだか単精度のSIMDでしかない。
SSE2以降は倍精度も扱えるようになったんで共用化したほうがよくなったんだろ。
倍精度対応の演算ユニットは半導体のコストが大きいからね。
PowerPCのAltiVec(VMX)でも倍精度対応のスカラFPUと、単精度までのVFPUが共存してるが
POWER7のVSXでようやくレジスタセットごと統合の運びになりましたが。
0387,,・´∀`・,,)っ-○◎●
2009/02/22(日) 02:39:55俺に噛みつく奴は馬鹿ってより
馬鹿だからこそ噛みつくんですよ。
0388デフォルトの名無しさん
2009/02/22(日) 02:44:25だからPen4では・・とかCoreでは・・とか言われても知らんわ。現状では、一般的に議論ができるのはSSE1/SSE2しかないな。
実際PC使いこなしてアプリ作ってるわけでもないくせに、お前の主張など、「ソニーのパソコンは・・・東芝のパソコンは・・・」とか言ってるカスタマーの戯言にしか聞こえんわw
0389,,・´∀`・,,)っ-○◎●
2009/02/22(日) 02:45:390390,,・´∀`・,,)っ-○◎●
2009/02/22(日) 02:46:53それで、x87とSSEが分かれてないPentium IIIのパソコンをいまだに使ってるんですね。
零細企業乙
0391デフォルトの名無しさん
2009/02/22(日) 02:51:29隅々までマニュアル読んでるようだし、どこかの雑誌とかベンチャーが「ベンチとってくれない?」とかの依頼ぐらいはあるだろから。
少なくともお前の能書きを2chスレに書かなくていいからw
0392,,・´∀`・,,)っ-○◎●
2009/02/22(日) 02:52:440393デフォルトの名無しさん
2009/02/22(日) 02:56:04ダサw
0394,,・´∀`・,,)っ-○◎●
2009/02/22(日) 02:56:520395,,・´∀`・,,)っ-○◎●
2009/02/22(日) 02:59:28ウェキ(笑)
0396,,・´∀`・,,)っ-基地外-
2009/02/22(日) 03:00:330397,,・´∀`・,,)っ-○◎●
2009/02/22(日) 03:07:58http://ja.wikipedia.org/wiki/
左上のロゴよく読んでね。
これが「ェ」に見えちゃう人は目か頭がおかしいです
0398デフォルトの名無しさん
2009/02/22(日) 03:08:36一応言っておくと発音のときはスラッシュを使う。
で、wikiの/i/は/e/ではないので口が横に大げさに伸びるわけで、日本人の耳では「い」や「いぇ」ではなく「え」に聞こえるはず。
また、まえの/w/と重なって「い」のようにはっきり聞こえる事はない。
短母音にこだわっちゃう辺りも、団子は生粋の日本男児なのかねぇ。どこ出身?
0399,,・´∀`・,,)っ-○◎●
2009/02/22(日) 03:10:07?????????
0400,,・´∀`・,,)っ-○◎●
2009/02/22(日) 03:17:04項目無いから作ってよwww
0401デフォルトの名無しさん
2009/02/22(日) 03:23:22大阪民国
団子はPGじゃないだろ?
0402デフォルトの名無しさん
2009/02/22(日) 03:31:43こういうどうでもいいところに情熱を注ぐ意味が分からん。
ところで団子のINTELウンチクはもういいから、このスレでは小数の話題にしてくれないか?
0403,,・´∀`・,,)っ-○◎●
2009/02/22(日) 03:32:55※いわゆるコラボレーションツールのWikiの由来も元々は地元の観光バスが由来です。
ハワイ原住民はムー大陸の末裔なんて言われるくらいガチのウラル・アルタイ語族。
a e i o uの発音はハッキリしてて、イとエを聞き間違えることなんて有りえませんよ。
ハワイ行ったこと有りますか?無いでしょうね。
↓Google先生もお困りです。
http://www.google.co.jp/search?q=%E3%82%A6%E3%82%A7%E3%82%AD%E3%82%A6%E3%82%A7%E3%82%AD%E3%83%90%E3%82%B9
ウェキウェキバス に一致する情報は見つかりませんでした。
0404デフォルトの名無しさん
2009/02/22(日) 03:34:27層化かと思ったけど、ああ在日なのね。
別に層化も在日は嫌いじゃないんだけど、それならファビョーリやすいのも納得だわw
0405,,・´∀`・,,)っ-○◎●
2009/02/22(日) 03:40:10悪いがミンジョクではない。俺はシオレスト(笑)だぞ。
0406,,・´∀`・,,)っ-○◎●
2009/02/22(日) 03:43:390407デフォルトの名無しさん
2009/02/22(日) 03:49:100408デフォルトの名無しさん
2009/02/22(日) 03:54:47そういうウンチもいらないからw
ウンチするなら他でやってくんない?
0409,,・´∀`・,,)っ-○◎●
2009/02/22(日) 03:59:350410デフォルトの名無しさん
2009/02/22(日) 04:09:060411,,・´∀`・,,)っ-○◎●
2009/02/22(日) 04:10:15JavaやC#でPL/IやCOBOL同様に10進演算をサポートしてる理由を考えてみてくれ。
ちなみに754rのドラフトにも10進演算の項目入ってるよ。確認しる。
http://754r.ucbtest.org/
FP80(笑) ウェキ(笑)
0412,,・´∀`・,,)っ-○◎●
2009/02/22(日) 04:14:55ムー大陸は太平洋の島々の言語の構造や発音の共通性から言語学者が唱えた仮説だよ。
少なくとも母音の発音は同じアルタイ語族の日本と同じだってこと。
0413デフォルトの名無しさん
2009/02/22(日) 05:15:000414デフォルトの名無しさん
2009/02/22(日) 05:18:460415デフォルトの名無しさん
2009/02/22(日) 05:23:483DNow!のではなく、SSEのprefetchを使えば良い。
>>386
>SSE2以降は倍精度も扱えるようになったんで共用化したほうがよくなったんだろ。
共用を前提として、SSE2を作ったという考えをしてみる。
0418デフォルトの名無しさん
2009/02/22(日) 10:37:02http://download.intel.com/jp/developer/jpdoc/impliment_j.pdf
P.9-10
> x87 加算器とパックドFP 加算器の統合も検討されましたが、こ
> ちらは開発スケジュールの関係で実現には至りませんでした
0419,,・´∀`・,,)っ-○◎●
2009/02/22(日) 13:26:34海洋民族の航海技術を無視した白人優位思想が根底にあるね。
白人ブルーブラッドが黄色人種を支配してたなんて電波な説だし。
自分たちの古代文明が見つかってないのでどこかにあったと思い込みたい白人に熱狂的に支持された。
※もちろんブルーブラッドなんて比喩であって、実際に人の血を青くしてみた創作は○ーゼ○ォンくらいのものです。
0420デフォルトの名無しさん
2009/02/22(日) 13:32:170421デフォルトの名無しさん
2009/02/22(日) 13:38:47秋葉原のショップでは、こなた(らき☆すた)のフィギアは売ってますか?
0422デフォルトの名無しさん
2009/07/11(土) 00:11:19>362にあるように元は英語だろうけど、それを直訳した馬鹿がいるから
>361のような「銀行で使う」と思い込む間抜けが出てくるんじゃないか。
寧ろ鉱工業などで測定結果の集計するのによく使うのに。
0423デフォルトの名無しさん
2009/07/11(土) 21:25:480424デフォルトの名無しさん
2009/07/11(土) 22:34:38まぁ、銀行でも使うケースと使わないケースがあるのだろうし、
「銀行型」って言い方をするよりも「ISO丸め」って言い方でいいんでない?
まぁ、>422は言い過ぎだね。
0425デフォルトの名無しさん
2009/07/11(土) 22:49:060426デフォルトの名無しさん
2009/07/11(土) 23:04:270427,,・´∀`・,,)っ-○○○
2009/08/16(日) 13:27:05エウレカ厨乙
0428デフォルトの名無しさん
2009/09/20(日) 13:20:35嫌いなサイトが2chだとか書いてたろ。
0429,,・´∀`・,,)っ-○○○
2009/09/20(日) 19:09:530430デフォルトの名無しさん
2010/01/30(土) 07:55:530431デフォルトの名無しさん
2010/03/04(木) 04:58:05最近のCPUは除算のレイテンシとスループットが異様に小さいんだね。
FDIVでレイテンシとスループットが6と5って乗算とそんなに差がなくなっているね。
あとx87の表にNehalemがないのはNehalemってx87を積んでないの?
0432デフォルトの名無しさん
2010/03/04(木) 10:07:17バグ付きPentiumで有名になったアレ。まだまだ早くなるのかも。解説お願い。
float同士の割り算の全パターンを事前にテーブル化して焼いとくのもそう遠くない未来のような。
(仮数部だけでいいとして46bitのインデックスを引っ張るテーブルがあればいいのか?
0433デフォルトの名無しさん
2010/03/04(木) 10:39:400434デフォルトの名無しさん
2010/03/18(木) 04:44:33最近のコンパイラが吐くコードってスカラーでもaddssとかsubssを使っていることが多いので、
それだと何もしなくても”SSE”を使ったコードになってしまう気がする。
それともSIMDを使わないのはSSEを使っているとは言えないとなるのだろうか?
0435デフォルトの名無しさん
2010/03/18(木) 07:46:55とエスパー回答してみる。
0436デフォルトの名無しさん
2010/03/19(金) 07:02:170437デフォルトの名無しさん
2010/03/19(金) 07:08:330438デフォルトの名無しさん
2010/03/20(土) 05:22:140439デフォルトの名無しさん
2010/03/20(土) 17:58:41精度を同じにするには、どのオプションを使えばよいのでしょうか?
0440,,・´∀`・,,)っ-○○○
2010/03/20(土) 18:07:52Pentiumの除算ユニットはRadix-4 SRTっていうアルゴリズムを使っている。
http://journal.mycom.co.jp/column/architecture/090/index.html
45nm以降のCoreアーキテクチャはそれより強力なRadix-16 SRTで
4ビットずつ処理出来るから従来の倍程度は速い。
0441デフォルトの名無しさん
2010/03/20(土) 18:08:470442デフォルトの名無しさん
2010/03/20(土) 18:09:31http://homepage1.nifty.com/herumi/prog/prog90.html#PRECISION
0443デフォルトの名無しさん
2010/06/25(金) 01:13:02スカラーのコードの方が遙かに速いんだけど、そんなことってあるのかな?
インテルのCPUなら概ね2倍になるコードなんだけど、2倍どころか1/3にもなりそうな感じだった。
ただ、倍精度になるとスカラーよりも速くなる。
ICCでやったりgccでいろんなオプション試したけど、あんまりかわらないので何が原因かわからずにいる。
これだけで原因がわかるエスパーな人がいると助かるんだが。
0444デフォルトの名無しさん
2010/06/25(金) 13:59:28>4つ目は省電力機能の拡張だ。Opteron 6100にはIstanbul世代で実装されていなかったC1E(CPUがスリープモードにあるときの電
>力を減らす機能)が実装されたほか、「AMD Cool Speed Technology」と呼ばれる省電力機能が実装されており、温度センサーで温
>度が限界を迎えたと判断したとき、プロセッサのPステートをより低い段階へと強制的に移行させる機能だ。これらの機能により、プロセ
>ッサの電力効率を前世代に比べて高めている。
CPU温度が高くてクロックダウンしてるとか?
分からんけどw
0445デフォルトの名無しさん
2010/06/25(金) 20:14:14ベクトル化が下手かOpteronの単精度がうんこかOpteronが不得意な命令を使っているか、
だと思う。
ICCはインテルCPU用の最適化しかしないという噂だけど、
gccはそんなことないはずだし。
プログラムの一部でもさらす気があるなら
もうちょっと答えられるかも。
C++とIntrinsicライブラリ?
C++とインラインアセンブラ?
C++とアセンブラ?
32bit? 64bit?
0446デフォルトの名無しさん
2010/06/25(金) 20:57:24スカラーのコード
x87 or SSEのスカラー命令を使うコード?
SSEのコード
コンパイラの設定でSSEを使うようにしたスカラーコード or 並列化したコード?
0447デフォルトの名無しさん
2010/06/26(土) 01:45:18これさ、一度CPUクーラーのファンを止めて、高負荷で動かしてみたことがあるんだけど、
マザーから警告のアラームがなって、ヒートシンクをさわったらさわれなくなる位めちゃくちゃ熱くなっていたけど、
実行しているプログラムが落ちることなく、動き続けていたから、相当熱くなるような環境でないと、
クロックが落ちることは無いと思う。よく負荷テストとかでPrime95とかいうFFTを馬鹿みたいに立ち上げる様な
ことをしない限りは無いんじゃないかな。
0448デフォルトの名無しさん
2010/06/26(土) 01:54:08レスサンクス。
使っているのはC++とIntrinsic。最初はインラインアセンブリで書いていたんだけど、
WindowsのVCCも考えて、Intrinsicに変更した。
コードをさらしたいのだけど、さすがにそれは出来ないので、
ちょっとシンプルなコードを書いて比較してみるよ。
何かわかったら書き込んでみる。
なんとなく思っているのは単精度だとシャッフルやらシフトを多用しているんだけど、
倍精度ではデータ幅の関係でそんなにやらなくていいので、Opteronはシャッフルとかシフトに弱いのかなあ?
とか思っている。
>>446
64bitで使っているんで、もはやコンパイラがx87のコードを吐いてくれません。
ちょっと表現が悪かったけど、SSEと言っているのはベクトル化したSIMDコードという意味。
0449デフォルトの名無しさん
2010/06/26(土) 04:22:39シャッフルのレイテンシ
AMD Family 10h: 3 cycle
Intel Penryn以降: 1 cycle
0450デフォルトの名無しさん
2010/06/26(土) 10:40:33キャッシュ構成を疑ってみるのはいかが。
Opteronの一次キャッシュって今も2-wayなの?
0451443
2010/06/29(火) 01:29:17ループの中に
for(;;)
{
//A,B,Cその他諸々のデータを取ってきて下記を実施
SSEの計算群1 -> 結果をxmm0に最終的に放り込む
SSEの計算群2 -> 結果をxmm5に最終的に放り込む
SSEの計算群3 -> 結果をxmm10に最終的に放り込む
// メモリへの書き込み
A[i] = xmm0;
B[i] = xmm5;
C[i] = xmm10;
}
と言うような感じなんだけど、メモリへの書き込みの段階で偉く遅くなっていた。
>>450が言うようにキャッシュの問題なんだろうけど、解決方法は無いのかな?
Opteronはライトスルーなのかな?
A、B、Cの結果は再利用されることはないので_mm_stream_ps()でやってみたけど、そっちはもっと遅くなった。
0452デフォルトの名無しさん
2010/06/29(火) 03:11:1432kBの倍数+64*n(n=1,2,...,511)
に変える
0453デフォルトの名無しさん
2010/06/29(火) 19:57:17A,B,Cのサイズは?
SSEの計算群1 -> 結果をxmm0に最終的に放り込む
A[i] = xmm0;
SSEの計算群2 -> 結果をxmm5に最終的に放り込む
B[i] = xmm5;
SSEの計算群3 -> 結果をxmm10に最終的に放り込む
C[i] = xmm10;
とやってみるとか。
Cだけ_mm_stream_psにしてみるとか。
0454デフォルトの名無しさん
2010/06/29(火) 22:57:53スカラーコードではA,B,Cは独立した
ループで処理してるのかな?
0455443
2010/06/30(水) 02:18:30レスありがとう。
実はすでにやってみたけど変わらなかった。
ひょっとしてレジスタが足りなくなって、xmm0とかが、メモリに待避させられているのでは?
と思ったんだけど。
A,B,Cのサイズ自体多次元配列で、すごく大きいけど、ループの中では4K以下になるように処理している。
たとえば
AAA[i][j][k]の3次元配列があった場合、
A = AAA[i][j]
と1次元は配列として扱っている。そしてA[max]が4KB以下になるようにしている。
>>454
スカラーのコードもA,B,Cでループ内で処理している。
やっぱり、スラッシングが原因なのかなあ?
0457デフォルトの名無しさん
2010/06/30(水) 19:03:04計算群1,2,3で参照しているメモリがA,B,Cとスラッシングしてるんじゃないかな。
なので、こうしたらどうだろう?
for () {SSEの計算群1-> 結果をA[i]}
for () {SSEの計算群2-> 結果をB[i]}
for () {SSEの計算群3-> 結果をC[i]}
これでも計算群1で参照しているメモリがA[i]とスラッシングしてたらお手上げなんだけど。
0458443
2010/07/01(木) 01:21:40>>457
いろいろと調べてみたら、キャッシュの問題ではなくて、
NUMAノードの設定が問題だったようだ。
メモリの確保をmalloc()ではなく、numa_alloc_onnode()でダイレクトにNUMAノードを指定してあげたら、
ほぼスカラーの倍の速度が得られたよ。
numactlをつかって、--preferred=nodes --localallocとかいろいろといろいろとオプションを
つけてやってみたけど、うまく指定したノードでのメモリ割り当てが出来ていなかったみたい。
いずれにしてもSSEの問題ではなかったので、変な質問をして申し訳ない。
レスしてくれた人ありがとう。
ただ、プリフェッチの指定をしていた部分でNehalemではかなり効果があったのが、
Opteronでは全く効果が無いので、プリフェッチの距離とかはOpteron用に考えないといけない様だ。
0459デフォルトの名無しさん
2010/07/01(木) 08:56:52ていうかSMP Opteron由来の問題とは俺も気付かなかった。
0460デフォルトの名無しさん
2010/07/23(金) 11:32:54ー10、835
とかいう問題
0461デフォルトの名無しさん
2010/07/27(火) 16:59:37First touch 問題だね
■ このスレッドは過去ログ倉庫に格納されています