08/05/24 14:05:25
代々木の
カレーライスうまいよね
765:デフォルトの名無しさん
08/06/12 00:36:24
uint64_tの値を
16bitずつ小分けに取得したいのですが
何型にキャストするのが正しいのですか?
766:デフォルトの名無しさん
08/06/12 01:16:39
uint16_t でええんちゃう?
そもそも、質問の意図が、そう言う話とはちゃってる?
767:デフォルトの名無しさん
08/06/12 01:24:12
union知らんのって話でしょ
768:デフォルトの名無しさん
08/06/12 02:25:12
>>765
キャストは最後の手段にしようぜ。
ふつうに u64 & 0xffff, (u64 >> 16) & 0xffff, .... でいいでしょ。
769:デフォルトの名無しさん
08/06/12 02:49:17
ここは最適化のスレだから、一番最適化がかかりそうな
方法を聞いているに違いない。
配列としてアクセスするのが一番期待できるかな?
770:デフォルトの名無しさん
08/06/12 02:55:12
>>769
動作保証が無けりゃ問題外でしょ。ビットシフトで取り出すように書いとけば、
コンパイラが勝手に 16 ビットずつメモリから読み出すように最適化することも
できるだろうし。むしろメモリへのアクセスを陽に書かないほうが早い可能性もある。
771:デフォルトの名無しさん
08/06/12 03:03:50
union
772:デフォルトの名無しさん
08/06/14 00:12:11
>>767,771
エンディアンに依存したらダメじゃね?
773:デフォルトの名無しさん
08/06/14 00:14:54
そんなあなたに #if
774:デフォルトの名無しさん
08/06/14 00:18:29
最適化するんだからマシン固有の癖(エンディアン)に
依存する問題まで考えて移植性を重視する必要ねーだろ
775:デフォルトの名無しさん
08/06/14 00:19:09
それぞれの環境ごとに最適化すればいい
776:,,・´∀`・,,)っ-○◎●
08/06/14 00:43:50
pextrwで(ry
777:デフォルトの名無しさん
08/06/14 00:49:04
bswapも(ry
778:デフォルトの名無しさん
08/06/14 12:34:01
小分けしたいだけなんだからエンディアン考えなくてもいいんじゃないかと思う
779:デフォルトの名無しさん
08/06/14 22:31:12
union 使うなら考えんといかんだろ?
そもそも今時のプロセサならバレルシフタぐらいは積んでるだろうから、
>>768 で十分だと思うが。
780:デフォルトの名無しさん
08/06/17 08:53:09
ビット演算だけで、剰余を求める方法を教えてください
781:デフォルトの名無しさん
08/06/17 08:58:26
646 名前:デフォルトの名無しさん[] 投稿日:2008/01/23(水) 21:06:35
割り算を掛け算とビットシフトに置き換える計算式求めるプログラムできた
#include <iostream>
using namespace std;
main(){
unsigned int N,n,k;
for(N=2; N<65000 ; N++){
for(n=0; (1<<n)<N ; n++); n+=15;
double X=(pow(2,n)/N);
unsigned int Y=(unsigned int)X;
unsigned int d=0;
if(X-Y<=Y+1-X)d=(unsigned int)(pow(2,n)- (N-1)*Y)-1; else Y++;
printf("x /%5d = ( x * %5d + %5d ) >> %2d",N,Y,d,n);
for(k=1; k<(1<<16) ; k++) if(k/N != ((k*Y+d)>>n))break;
if(k==(1<<16))printf(" OK\n"); else printf(" ERR\n");
}}
647 名前:646[] 投稿日:2008/01/24(木) 15:42:18
64bit機か、内部で64bitまで計算結果を保持しているなら
32bitの割り算も出来るけど646は16bit同士です
782:デフォルトの名無しさん
08/06/17 08:59:56
2^n の剰余 とそれに近い数の剰余は簡単にも止まる。
783:デフォルトの名無しさん
08/06/17 10:37:14
止めんなw
784:デフォルトの名無しさん
08/06/17 10:51:07
>>780
あらかじめ除数がわかってないと>>781は使えないよ。