プログラミングの為の数学と算数 vol.2at TECHプログラミングの為の数学と算数 vol.2 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト450:434 06/03/10 22:11:31 言い訳すると >>427 で >単純に0.5を足して切り捨てると除算結果が負数の場合に問題があるのです に騙されてしまった。 単純に0.5を足して切り捨てるのをやりたかったのだろう。 ただ、X86では除算の結果が負数になる場合は余りも負数になる。 a/b= n余りsなら a = n*b + s = s+b+(n-1)*b となる修正をすればいい アセンブラで書けば、 cdq idiv sqr edx,#31 add eax,edx と4命令 451:デフォルトの名無しさん 06/03/10 22:13:38 >>441は xが正でyが負のときおかしい。 かけ算はいってるけど int func(int a, int b){ int absa = (a >> 31) ^ a; return (a + absa*b + (b>>1)) / b - absa; } 452:434 06/03/10 22:18:43 >>451 そうだね。他に y=1の時も >>441は変になるだろう >>449なら大丈夫な筈だ 453:434 06/03/10 22:21:39 アセンブラの sqr は sarのタイプミスだ >>950 アセンブラだと4行なのに 使わないと除算とmodを別に計算するか div 関数を使う必要があるのが面倒な所 div関数だと結果も構造体渡しだからメモリアクセスが入って遅くなる 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch