プログラミングの為の数学と算数 vol.2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG語りましょう。TIPS/Q&Aスレです。
0757デフォルトの名無しさん
2007/03/29(木) 16:33:07だから「ズレている」を定義してくれと言ってるんだけどな。
一点に集中してても「ズレてない」とするなら残差自乗で十分だし、
そうでないならより輪郭線抽出などの手法が要るかもしれない。
0758デフォルトの名無しさん
2007/03/29(木) 16:37:32もう少しややこしくするなら、点同士がどれだけ中心からの角度で分散しているかの数値を入れるかい?
0759デフォルトの名無しさん
2007/03/29(木) 16:44:25だとすれば>750で充分だと思うのだけど。
#目的も判らずに数学的な意味を見出そうとしても虚しいばかりだ。
0760デフォルトの名無しさん
2007/03/29(木) 16:52:340761ラジアンの比較で躓いてます
2007/03/29(木) 16:57:43質問の回答として、以下のコードを教えてもらいました。
v1 … p1→p2 のベクトル
v2 … p2→p3 のベクトル
struct point { double x, y; };
bool isJustLeft(point v1, piont v2)
{
double corssProd = v1.x * v2.y - v1.y * v2.x; //外積
double norm1 = v1.x * v1.x + v1.y * v1.y; // |v1|^2
double norm2 = v2.x * v2.x + v2.y * v2.y; // |v2|^2
if( corssProd < 0.0 ) return false; // 時計回りはダメ
if( crossProd * crossProd == norm1 * norm2 ) return true; // 直角判定
return false;
}
でも、ベクトルの外積って通常3次元のベクトルを返しますよね。上記だと
> double corssProd = v1.x * v2.y - v1.y * v2.x; //外積
とスカラー値を返しているのですが、今一つやっている意味が判りません。
http://yuki.to/math_cgi/prybbs.html?log=3&mode=res&no=36824
ぐぐったらこんな掲示板見つけたけど、回答者の答えがイマイチ判りません。
コードを通して、ベクトルを理解したいのですが、誰か教えてもらえませんか?
0762デフォルトの名無しさん
2007/03/29(木) 17:08:28v1,v2が平面上なのでZ成分のみとなります。 だから省略したのでしょう
0763デフォルトの名無しさん
2007/03/29(木) 17:24:431つは、>>762 の言うように、3次元ベクトルの外積の考え方を使って、
(x1, y1, 0) × (x2, y2, 0) = (0, 0, x1 y2 - x2 y1) の z 成分のみを取ったもの。
もう1つは、n 次元のベクトルは、n - 1 本あれば、それらに垂直なベクトルが決まるので、
n - 1 本のベクトル → 1 本の n 次元ベクトルを求める演算を外積と呼ぶ。
こっちの流儀だち、2次元ベクトルの外積は1本→1本の演算になって、
「積」というとちょっと微妙。
まあ、x1 y2 - x2 y1 は、外積の値というか、
符号付面積、あるいは行列式よね。
3次元ベクトルの外積は、その絶対値が符号付面積になってるから、
その類推で、2次元ベクトル2本の貼る平行四辺形の符号付面積を外積と呼ぶのかも。
0764ラジアンの比較で躓いてます
2007/03/29(木) 17:36:19なるほど・・・時計回りだとZ値が下方向
反時計回りだと上方向になる性質を利用して、
Z値だけで判断すればいいという事ですね!!
0765ラジアンの比較で躓いてます
2007/03/29(木) 17:39:31double norm1 = v1.x * v1.x + v1.y * v1.y; // |v1|^2
double norm2 = v2.x * v2.x + v2.y * v2.y; // |v2|^2
0766デフォルトの名無しさん
2007/03/29(木) 17:47:02え、えっと、変数名もnormだし、コメントもnormだし、normを計算しているんじゃないかなあ。
0767デフォルトの名無しさん
2007/03/29(木) 17:53:54(v1.x * v2.y - v1.y * v2.x)^2 -(v1.x * v1.x + v1.y * v1.y)*( v2.x * v2.x + v2.y * v2.y)
を変形してくと・・・・
って内積計算した方が計算量少ないかもしれないが
まあ、折角 外積計算したからって所じゃないのかな
0768ラジアンの比較で躓いてます
2007/03/29(木) 18:03:57一瞬正規化?とか思っちゃいましたが、「ノルム」でしたか・・・orz
0769デフォルトの名無しさん
2007/03/29(木) 18:19:33って日本語の数学では何だっけ?
0770デフォルトの名無しさん
2007/03/29(木) 18:27:370771デフォルトの名無しさん
2007/03/29(木) 18:37:01参考までに、中国語では「范数」と書くそうな。
0772デフォルトの名無しさん
2007/03/29(木) 18:41:31ノルムはノルムじゃない?
数学用語としてじゃなくて、一般には基準とか模範って訳すけど。
ノルムに似たので(というか、絶対値の一般化)付値ってのがあるけど、
それは英語でも valuation。
0773デフォルトの名無しさん
2007/03/30(金) 08:56:16片方を90度回転したベクトルで内積をとっても、時計回り判定はできる。
90度回転操作を (x, y) → (-y, x) とすると、外積とコメントされた式と同じになる。
好きな方で解釈するといい。
0774デフォルトの名無しさん
2007/03/30(金) 09:20:27片方のベクトルが水平(y成分が0)になるように回転変換し、
もう一方のベクトルのx成分が0なら垂直で y成分の符号を見ればいい
でも、それが内積と外積になっちゃうんだけどね
0775デフォルトの名無しさん
2007/03/30(金) 11:56:04その都度、数学の教養を身に着ける順序でも遅くなくねえ?
問題集をひたすら解くだけの抽象的な数学の本ばかり読んで
いると、生きることの意味がわからなくなってくるよ。
0776デフォルトの名無しさん
2007/03/30(金) 11:57:48半径10センチの球表面の座標(XYZ)をファイルに出力したいと考えております
点の間隔は0.1センチぐらいでいいかな、と
ファイルに落とす部分は、わかっているんですが
座標を算出するアルゴリズムが、さっぱりわからなくて
お分かりになる方、御教授いただけると助かります
0777デフォルトの名無しさん
2007/03/30(金) 12:20:47それが許されればな。
>>756
3次元空間なら
x^2 + y^2 + z^2 = 半径^2
を満す実数だったと。
ざっぱになら x と y で for ループ回しながら z の値を算出すすとか。
もしくは 三次元空間の極座標
x = 半径 * sin(th1) * sin(th2)
y = 半径 * sin(th1) * cos(th2)
z = 半径 * cos(th1)
解説: http://hp.vector.co.jp/authors/VA030421/fdd06.htm
で角度(th1, th2)でループまわすことも考えられる。
角度で回すのなら、球面三角法
http://ja.wikipedia.org/wiki/%E7%90%83%E9%9D%A2%E4%B8%89%E8%A7%92%E6%B3%95
も見おくべし。
0779デフォルトの名無しさん
2007/03/30(金) 20:41:06できてもさしつかえないならいいけど、もしさしつかえあるなら
ユニバーサルメルカトル図法みたいな雰囲気で局所座標系を
とったりするとよさそうな気が
0780デフォルトの名無しさん
2007/03/31(土) 01:53:290781デフォルトの名無しさん
2007/03/31(土) 02:39:25http://www.cubido.at/Blog/tabid/176/EntryID/86/Default.aspx
ジオデシックドームの頂点求めるんだたら↓これ?
http://www2.tokai.or.jp/tomo-kun/readmeJ.html
0782デフォルトの名無しさん
2007/03/31(土) 04:54:500783デフォルトの名無しさん
2007/04/11(水) 11:07:50ヒントはないでしょうか?
0784デフォルトの名無しさん
2007/04/11(水) 11:16:08単純に円弧で近似したいのがどういう状況か判らないのだけど
曲線の場合は、微分が一致するように接続してゆけばいいのだけど
円弧の場合は2点と半径で求まってしまうので、
どうやっても接続点が尖がってしまう
0785デフォルトの名無しさん
2007/04/12(木) 00:12:150786デフォルトの名無しさん
2007/04/12(木) 08:40:070787デフォルトの名無しさん
2007/04/13(金) 04:39:530788784
2007/04/13(金) 06:06:45接続点で中心の方向が一致すればいいと解けば
接続点が尖らないように出来るか
0789デフォルトの名無しさん
2007/04/13(金) 06:16:25)
(
)
(
こういうこと?
0790デフォルトの名無しさん
2007/04/13(金) 13:54:27直線も半径を限りなく大きな値にすれば可能っぽいね。
適当に曲線から3点抽出して、3点を通る円を求めればいいんじゃね?
必要精度に達していなければ間隔を短くし、足りてれば長くして情報量を落とせばいけそう。
0791デフォルトの名無しさん
2007/04/13(金) 20:32:080792デフォルトの名無しさん
2007/04/14(土) 00:14:380|
―+―――→x
|
|
↓
y
を、
y
↑
|
|
―+―――→x
0 |
に変換する行列教えてください。
0793デフォルトの名無しさん
2007/04/14(土) 00:26:240794デフォルトの名無しさん
2007/04/14(土) 15:36:47>about:configで「network.standard-url.encode-utf8」を「true」にします。
上記の設定で、無事、日本語になりました。
気になるのは、IE7では、『"』⇒『"』でしたが、
http://forum.mozilla.gr.jp/?mode=new&no=0&X='国際化'
http://forum.mozilla.gr.jp/?mode=new&no=0&X="国際化"
FireFox2では、『"』⇒『%22』になっていました、少々オシイです。
http://forum.mozilla.gr.jp/?mode=new&no=0&X='国際化'
http://forum.mozilla.gr.jp/?mode=new&no=0&X=%22国際化%22
『%22』を『"』に戻す作業が残ってしまいます。
共通化としてOpera9の国際化URL設定も分かると良いと思います。
0795デフォルトの名無しさん
2007/04/18(水) 10:03:30ゲームプログラムは数学的要素満載だと思うのですが。
0796デフォルトの名無しさん
2007/04/18(水) 10:46:250797デフォルトの名無しさん
2007/04/18(水) 13:57:03どんな分野であっても、スレタイが読める程度の日本語力は必要。
0798デフォルトの名無しさん
2007/04/18(水) 21:51:26事務web系って何ですか?
0799デフォルトの名無しさん
2007/04/18(水) 22:46:08ネット通販の注文を受け付けて倉庫に発送を指示するとか
0800デフォルトの名無しさん
2007/04/19(木) 02:44:550801デフォルトの名無しさん
2007/04/19(木) 02:48:30出来るだけ長く働ける分野が良いんです
0802デフォルトの名無しさん
2007/04/19(木) 11:29:460803デフォルトの名無しさん
2007/04/19(木) 11:38:45http://pc11.2ch.net/test/read.cgi/tech/1171457185/
を汚した奴だろ?
あちこち汚してゆくような奴が奴隷の待遇の上下を聞いたって嫌われるだけだろうに
0804デフォルトの名無しさん
2007/04/19(木) 23:48:040805デフォルトの名無しさん
2007/04/21(土) 06:19:39あなたの息子を舐め舐めしますよ
0806デフォルトの名無しさん
2007/04/21(土) 09:01:30勉強方法が知りたい。大学受験レベルの数学問題をひたすら解くのがいいのか、
公式を理解しつつ大学レベルの数学を勉強するのがいいのか。
どんな風にすればいいか教えてください。。。。。
0807デフォルトの名無しさん
2007/04/21(土) 09:31:49プログラミング・数学の能力と、役立てようとしている
方面によって勉強すべきものは変わる。
目的に近いところを読んでから、不足してそうな部分を
適宜補うってのが順当なごく普通の勉強の仕方。
どんなのがやりたいか言ってくれれば本などは紹介するよ。
因みに受験レベルの数学は単純計算すら覚束ないなら
仕方が無いけれど、そうでなければやる必要なしと思う。
0808デフォルトの名無しさん
2007/04/21(土) 16:00:13これは例えるなら「スポーツに役立つ練習方法を知りたい」と言ってるようなもの。
スポーツの種目によって練習方法が違うように、プログラミングの分野によって役立つ
数学の分野も違う。
# プログラミングで飯を食っていきたいなら、数学より簿記でもやった方が潰しがきくような気がしないでもない。
0809806
2007/04/22(日) 13:35:06レスサンクス。
プログラミングはCの基本的な文法を理解している程度で、数学に関しては
高校レベルもサパーリな状況です。
簿記の知識って業務系だとそんなに役に立つのか。。。。
それなら一応日商の簿記一級を持ってるんで、この知識を生かして業務系に
進んだほうがいいのかなと思ってるんだが、
「生涯現役でプログラマなんだぜ?」
な漏れとしては組込み系や制御系のほうがいいのかなと考えたり、、、
今現在はどの分野にいこうか迷ってるところです。
どうやらプログラミングに必要な数学は各分野ごとにまちまちで、漏れの
やりたいこと自体もまだ定まってないので、とりあえず高校レベルの数学を
勉強する。そしてその時の勉強法としては大学受験を目指す感じのやり方
じゃなく、基本的な公式を理解する程度でよいってことでFA?
0810デフォルトの名無しさん
2007/04/22(日) 21:45:37全部頼るのは良くない。
自分で決める、たぶんそれが一番大事だ。
0811デフォルトの名無しさん
2007/04/22(日) 22:39:13日本語でOK。
0812デフォルトの名無しさん
2007/04/24(火) 00:45:08毎年毎年現れる上に、人によって状況が違うし、いちいち答えてたらキリが無い
0813全知全能者
2007/04/25(水) 05:10:58原始時代は「筋力」
江戸時代は「家柄」
そして現代は「金」
現代社会では金を持っている人間が強い。
革新的なパラダイムの転換が無い限りこの価値観は変わらない。
0814デフォルトの名無しさん
2007/04/25(水) 15:49:140815デフォルトの名無しさん
2007/04/29(日) 00:22:43実行したいのは以下の式です。
// dst[0 〜 255]: 転送先ピクセルの色要素)
// src[0 〜 255]: 転送元ピクセルの色要素)
// rate[0 〜 255]; srcの比率 )
// (すべてbyte型です)
//
フェード式
= (dst * (255 - rate) + src * rate) >> 8;
~= dst + (((src - dst) * rate) >> 8);
(~= はニアリーイコールです)
これを実現するために以下のような計算方法がよく使われています。
1) short tmp = (short)src - (short)dst; //< 符号付き2バイト数に拡張します
2) tmp = (short)(tmp * rate); //< 演算結果の下位2バイトを結果として受け取ります
3) tmp = (word)tmp >> 8; //< 無符号型としてシフト()
4) byte result = (byte)(dst + (byte)tmp); //< tmpの下位1バイトのみを足し込みます
これだけ見ると変に複雑に見えますが、
実は計算にはmmxを使っていて4要素まとめて演算します。
そこで、1要素につき2バイトの範囲内で
(src - dst){-255 〜 255} * rate{0 〜 255}
の符号付き乗算をしないといけないため、このようなことになっています。
0816815
2007/04/29(日) 00:24:22例えば、src=0, dst=255, rate=255の場合、
結果としては0が期待されますが、実際に計算してみると
1) tmp = -255 = 0xff01
2) tmp = (short)(0xff01 * 0xff) = (short)0xfff01ff = 0x01ff
3) tmp = 0x01
4) result = (byte)(0xff + 0x01) = 0x00
となり正しい結果が得られます。
また、src=200, dst=225, rate=200の場合は、
204程度が望まれますが、実際に計算してみると
1) tmp = -25 = 0xffe7
2) tmp = (short)(0xffe7 * 0xc8) = (short)0xc7ec78 = 0xec78
3) tmp = 0xec
4) result = (byte)(0xe1 + 0xec) = 0xcd = 205
とほぼ正しい結果が得られます。
上の式は有名なライブラリで使われている式でもあり、
正しいことはほとんど保証されているのですが、
これがなぜ正しいのか証明できる方はいませんか?
少なくとも自分には理解できないです。
文献でもいいです。よろしくお願いします。
0817デフォルトの名無しさん
2007/04/29(日) 00:48:54どうしてもなにも、定義そのままの計算式じゃん。
> 1) short tmp = (short)src - (short)dst; //< 符号付き2バイト数に拡張します
(src-dst) は、-255〜+255 なので、short に納まる。
> 2) tmp = (short)(tmp * rate); //< 演算結果の下位2バイトを結果として受け取ります
(src-dst)*rate は、-65280〜+65280 なので、2の補数で17ビット必要→shortだと1bit足りない→後述
> 3) tmp = (word)tmp >> 8; //< 無符号型としてシフト()
((src-dst)*rate)>>8 は -255〜+255なので、2の補数で9ビット必要だが、2)の時点で9ビット目の情報は落ちている
> 4) byte result = (byte)(dst + (byte)tmp);
ここで、8ビット整数で計算するのだから、上記3)の所で、結果は8ビットあれば十分。9ビット目の値は要らない。
8ビットで演算するのに「-1(0xff)を足す」のも「255(0xff)を足す」のも、まったく同じ結果になることに気付けばOK。
3)の結果で、-255 が出てきたのを、+1 として処理してもまったく問題ない。
→ -255〜-1 を +1〜+255 で処理しても結果は同じ。
0818デフォルトの名無しさん
2007/04/29(日) 14:31:47おお!
8ビットまで精度を保証すればうまくいくってことね^^
どうもありがとう
0819デフォルトの名無しさん
2007/04/29(日) 18:19:52一番大事なのは物事を合理的に考える事が出来るか。
0820デフォルトの名無しさん
2007/04/29(日) 19:08:450821デフォルトの名無しさん
2007/04/29(日) 19:46:50ヒントはないでしょうか? と、質問した者です。
点列が1個の円や直線にフィットするかどうかは、最小二乗法などで、
解決できると思います。
したがって、どういう風なグループで円弧や直線にすると、さらに最小になるか、
という問題になるような気がするのですが、そういう問題には、どのような考え方で臨めばよいでしょうか。
0822デフォルトの名無しさん
2007/04/29(日) 20:18:42円は3点で決まるから、3点毎に円弧を描いても、近似と言い張れば近似になる。
0823デフォルトの名無しさん
2007/04/29(日) 20:40:030824デフォルトの名無しさん
2007/04/30(月) 01:30:110825デフォルトの名無しさん
2007/05/02(水) 18:06:14それを、精度をあたえることで、コンピュータに計算で円弧+直線に解かせられないでしょうかね。
0826デフォルトの名無しさん
2007/05/02(水) 18:27:41使う円弧の数を減らしたいという要求があるなら
単純に端から3点でフィッティングして、次の点が誤差の範囲内ならと処理してもいいし
最小2乗円を求めては、誤差の範囲が収まるならとやってもいいとおもう
ただし、誤差だけでは、つなぎ目がガクガクに見えるという事になる
だから、それが嫌なら、点との誤差が幾ら以内で、接続が滑らかであるというような条件を追加しないといけない
0827デフォルトの名無しさん
2007/05/02(水) 19:42:29用途を書いてくれればもう少し具体的なアドバイスが出てくると思われ
0828デフォルトの名無しさん
2007/05/02(水) 20:19:07滑らかじゃなくていいなら既に色々レスついてるからそれ参照。誤差ゼロ。
滑らかである必要があるなら、確かに精度(許容誤差)を与える必要はあるだろう。
滑らかって何とか言うならもっと勉強しなさい。
0829デフォルトの名無しさん
2007/05/04(金) 00:50:190830デフォルトの名無しさん
2007/05/15(火) 23:20:02の高速除算なのですが、
どうしてこれで正しく計算できるのか分かる方いませんか?
あと、割られる数が負数のときでも上手くいくような
つまり
X / D = Q (Qは整数)
のときに
-X / D = -Q
となるような高速除算の方法を知っている方はいますか?
0831デフォルトの名無しさん
2007/05/16(水) 01:13:49定数除算なら、誤差項を1ビット誤差以下に抑えればいいから、こういうことは出来るけど。
32bit同士の乗算がオーバーフローせずに使える場合。
X/3 = [X/3 + 2n/(3*2^32)] (∵ 2n/(3*2^32) < 1bit )
= [ (2^32 + 2)/3 * (n/2^32) ]
= 1431655766 * n / 2^32
= 1431655766 * n >> 32
0832デフォルトの名無しさん
2007/05/16(水) 01:16:49nが負なら最後に1足してくんなまし。
0833デフォルトの名無しさん
2007/05/16(水) 07:36:56Web上にある情報を、どれも正しいと思うな
Q=trunc(X/D +0.5) と計算したい筈なのに
m = 2*n-------------------1)
R = (2^m - 1) / D ---------2)
Q = (R * X + 2^n) >> m ------3) から>>m を2のベキに変更して
Q = (R * X + 2^n)/2^m Rに代入して
Q = ((2^m - 1) / D * X + 2^n)/2^m
Q = (2^m - 1) /2^m * X/ D + 2^(n-m)
~~~~~~~~~~~~~~~~ ~~~~~~~
(2^m-1)/2^m は1ではない
2^(n-m) は 0.5 ではない
これは単に使いたかった範囲で巧くいっただけだろ
0834デフォルトの名無しさん
2007/05/16(水) 11:48:36ありがとうございます。
一応、プログラムを組んで実験してみたのですが、
違う結果しか得られませんでした。
自分の理解が足りていないのかもしれません。
チェック用プログラムをアップしますので、確認していただければ幸いです。
http://kissho.xii.jp/1/src/1jyou6388.lzh
>>833
整数における割り算なので、やりたいのは四捨五入ではなく切り捨て、
つまりQ=trunc(X/D) です。
あと、使える値の範囲も>>830のページ上に書いてありますよ。
0835デフォルトの名無しさん
2007/05/16(水) 16:28:10831に書いた方法は、
R=(2^32 + F)/Dのとき、F=D-1では、多くのDで誤差が出る。
大事なのはRが割り切れることと、F/2^32が1bitより小さい正の値になること。
これが満たされない場合は、
R=(2^33+F)/Dとか、R=(2^34+T)/D-2^32なんかを使う必要がある。
(おまけに最後の例は最後に2^32分の補正が必要)
以上のようにR の決定がそんなに単純じゃないんだー。
だから定数除算って書いた。
っていうかハッカーのたのしみって本を買えばこういうことが書いてある。
興味あるならオススメ。
0836デフォルトの名無しさん
2007/05/16(水) 17:04:05http://swox.com/~tege/divcnst-pldi94.pdf
> Division by Invariant Integers using Multiplication
>
> 4 Unsigned division
> 5 Signed division, quotient rounded towards 0
> 6 Signed division, quotient rounded towards -∞
0837デフォルトの名無しさん
2007/05/16(水) 18:06:560838デフォルトの名無しさん
2007/05/16(水) 18:13:07実測してみないとなんともだけど割り算の結果を遅延評価するといいかもね。
0839デフォルトの名無しさん
2007/05/16(水) 23:59:10そうなんですか^^
ハッカーの教科書は持っていたのですがこんな話題があるとは知りませんでした。
ちょっと研究してみようと思います。
>>836
そのページを見てみたのですが、正確にやるのは結構大変なんですね^^
よく使う定数の除算のみを最適化して
あとはテーブルなりなんなりで処理することにしました。
>>837
http://pc11.2ch.net/test/read.cgi/tech/1168399966/99-
↑を見て欲しいのですが、x86のdiv命令は
おそらくもっとも効率化がめざましい命令の一種です。
最新の石ならばそのままが一番速いと思うのですが、
昔のCPUを考慮するとなかなかそういうわけにもいきません。
0840デフォルトの名無しさん
2007/05/17(木) 00:08:18この手の高速化は高級言語で記述してもコンパイラが糞なら無意味だし、そもそも可読性が落ちるので歓迎されない。
そうなるとアセンブラでの記述に限定されるわけだが、肝心のターゲットが書かれていないので議論するだけ無駄。
というかそもそもこのスレ向きの話題じゃない。
0841デフォルトの名無しさん
2007/05/17(木) 00:55:370842デフォルトの名無しさん
2007/05/17(木) 01:26:26その理屈で行くとハッカーのたのしみや>>836の内容は
まったく無意味ってことになりますね。
もちろんそんなことはなくて、
ビット演算やコンピュータ用数学(?)にはある程度の普遍性があります。
だから、ターゲットが明確に決まっていなくてもある程度は意味はあります。
(一応、特定アーキテクチャ専用の話題は避けたつもりなのですが、
div命令のレイテンシの話題はたしかにスレ違いですね^^)
>>841
ここでいう「昔のCPU」とは、Pentium4やAthlonXPクラスの
(多分)今一番普及しているCPUのことです。
さすがに考慮しないわけにはいかないです^^
0843デフォルトの名無しさん
2007/05/17(木) 06:19:35アセンブラ系スレなら有意義なんだろうが、それ以外の場所じゃ完全に無意味。
>ビット演算やコンピュータ用数学(?)にはある程度の普遍性があります。
これもない。現にシフト命令が異様に遅いコアが存在する。
5年10年前なら確かにその言い分は通用したが、複雑化したx86系CPUで
除算命令のような数クロックを稼ごうという時にターゲットも指定しないなんてありえないだろ?
0844デフォルトの名無しさん
2007/05/17(木) 07:11:01> アセンブラ系スレなら有意義なんだろうが、それ以外の場所じゃ完全に無意味。
んなことない。定数除算→乗算の最適化をやってくれない環境はあるし、自分
が仕事で使った RISC とかは加減シフトが実効 1 サイクル、乗算が 2 サイク
ルに対して除算命令は 33 サイクル(中で何やってるかわかるな。しかも除算
命令実行中に割り込みが入ると割り込み終了後に再度除算命令を実行し直す)。
> 現にシフト命令が異様に遅いコアが存在する。
後学のために教えてくれ。
0845デフォルトの名無しさん
2007/05/17(木) 07:46:16だから、それはアセンブラ系のスレでやってくれということでしょ
0846デフォルトの名無しさん
2007/05/17(木) 08:04:05速度だけの問題なら他でやって欲しい所。
0847デフォルトの名無しさん
2007/05/17(木) 09:09:48自分がもともと質問していたことは、除算→乗算+シフトの変換方法です。
(このスレのおかげで定数除算の最適化という分野があることを知りましたし、
特定の除算の最適化もできそうな感じです。
その点は本当に感謝しています)
確かに石によって演算速度の違いがあることは事実なのですが、
そういったこともふまえて、対象となるCPUをつらつら挙げて
CPU別の最適化方法をここで聞いた方がよかったのですか?
もちろん、自分的には大歓迎なのですが^^
>>846
収穫もあったことですし、自分はそろそろ去りたいと思います^^
0848デフォルトの名無しさん
2007/05/17(木) 10:32:12最適化スレもあればアセンブラスレもあるのに?
0849デフォルトの名無しさん
2007/05/17(木) 10:51:11そういう命令セットの定義とかも数学の範疇じゃないのか?
0850デフォルトの名無しさん
2007/05/17(木) 11:24:26>CPU別の最適化方法をここで聞いた方がよかったのですか?
は>>843の
>除算命令のような数クロックを稼ごうという時にターゲットも指定しないなんてありえないだろ?
に対するレスです。
当然、自分の考えは>>848さんと同じで「それはスレ違いでしょ?」です。
>>849
命令セットの定義が数学の範疇だというのははじめて聞きました。
そうなのかもしれないのですが、
自分は特定アーキテクチャの最適化の話はここでするべきでは無いと考えたのです。
0851デフォルトの名無しさん
2007/05/17(木) 11:45:33R>0 Xは正負のint 範囲で
Q=trunc(X/D) を
Q= (int)(((long)X*(long)R + k) >> (long)m )
で計算したいが 適切な R と m を求むって事だろ?
0852デフォルトの名無しさん
2007/05/17(木) 11:45:45求める問題ってのは、特に並列計算の分野で見ることがある研究だね。
実際のCPUくらいのコストモデルでやるのはかなり大変だと思うけれど
0853デフォルトの名無しさん
2007/05/17(木) 11:46:45少なくともここはアセンブラの話題振るスレじゃねえことくらいは理解してんだろ?
0854デフォルトの名無しさん
2007/05/17(木) 21:17:53ただ、その実装手段が大抵の場合アセンブラしかないだけ。
CPUの除算が遅いとか言い出したヤツが最初にスレ違い。
0855デフォルトの名無しさん
2007/05/17(木) 23:01:21除算は多倍長文字列でやった事あるけど、
別と比べて極端に難しかった。
0856デフォルトの名無しさん
2007/05/18(金) 01:50:28ここがム板である限り。
■ このスレッドは過去ログ倉庫に格納されています