2のべき乗か否か
■ このスレッドは過去ログ倉庫に格納されています
0001のぐー
NGNG無いでしょうか?
0002デフォルトの名無しさん
NGNGreturn false;
else
return ((n - 1) & N) == 0);
0003デフォルトの名無しさん
NGNG・最上位ビットが1
・それ以外が0
なら2のべき乗。
0004デフォルトの名無しさん
NGNG0005天才君
NGNGUint32 Is2N(Uint32 bits)
{
bits = (bits & 0x55555555) + (bits >> 1 & 0x55555555);
bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
bits = (((bits >> 4) + bits) & 0x0f0f0f0f;
bits += bits >> 8;
bits + (bits >> 16)) & 0xff;
return (bits-1);
}
分岐一切なしだ、どうだ?
0007天才君
NGNGまいりました。m(_ _)m
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNGn=0のときは使えないよ。
trueになる。
0011天才君
NGNGUint32 Get2N(Uint32 n)
{
n--;
n = (n & 0x55555555) + (n >> 1 & 0x55555555);
n = (n & 0x33333333) + (n >> 2 & 0x33333333);
n = (((n >> 4) + n) & 0x0f0f0f0f;
n += n >> 8;
n + (n >> 16)) & 0xff;
return (n&31);
}
ノンブランチアルゴリズム、これならどうだ?
0012デフォルトの名無しさん
NGNG私もしりたい。なにに使うんだろう。高速化
しなければいけないんだから、余程何度も
実行される部分なんだろうな。
ま、頭の体操としても面白いが。
0013デフォルトの名無しさん
NGNG0014天才君
NGNG0015こんなんどう?
NGNGint main()
{
double x,i=1;
printf("Input x > ");
scanf("%lf",&x);
while((i *= 2) < x);
if(x == i)
printf("true \n");
else
printf("false \n");
return 0;
}
0016こんなんどう?
NGNGdouble -> int
%lf -> %d
double じゃなくても良いですな。
0017こんなんどう?その2
NGNGint main()
{
int x;
printf("Input x > ");
scanf("%lf",&x);
while((x /= 2) > 2);
if(x == 2)
printf("true \n");
else
printf("false \n");
return 0;
}
0018こんなんどう?その2
NGNG0019こんなんどう?その2
NGNG0020デフォルトの名無しさん
NGNG数学教師は大学生になれば解るって逝ってたけど、俺もう25だよ(;´Д`)
0021デフォルトの名無しさん
NGNG別にこれといって法則があるわけじゃないんです。
ただ、0乗を1として扱うことにより、都合が良いからです。
私はそう聞きました。
0乗を下手な数値として扱ったり、0として扱うと
都合が悪いそうです。
0022aaa
NGNG0023デフォルトの名無しさん
NGNGこれは無視しておいてね。
0024とりあえず
NGNGint main()
{
int x,i=1;
printf("Input x > ");
scanf("%d",&x);
while((i *= 2) < x);
if(x == i || x == 1)
printf("true \n");
else
printf("false \n");
return 0;
}
ミスばっかで後味悪いんで、とりあえず 2^0 = 1 にも対応版。
今日は調子が悪い。鬱だ、詩嚢。
0025デフォルトの名無しさん
NGNGありがと!でも何か理不尽だ(;´Д`)
0026デフォルトの名無しさん
NGNGの話が数学板にあったような気がするよ。
宿題スレにしてはもりあがったな。
0027デフォルトの名無しさん
NGNG1)級数展開してゼロを代入したら1だったから?
2) a/a=a^1*a^(-1)=a^(1-1)=a^0
0029デフォルトの名無しさん
NGNGオー!確かに2)を計算すると1になる。
スゲー!スゲーよ兄貴!10年来の謎が解けたYo-
何か数学って楽しいかも?とか思った25の春・・・鬱だ氏のう(;´Д`)
0030かいぞう君〜♪
NGNGint main()
{
int x;
printf("Input x > ");
scanf("%d",&x);
if( !(x & (x-1)) && x )
printf("true \n");
else
printf("false \n");
return 0;
}
人のフンドシで相撲を取ってみたり〜♪
0032デフォルトの名無しさん
NGNG俺なら十日掛かるね
0033デフォルトの名無しさん
NGNG見た目はシンプルで良いんだが
理解するのに苦労するかもなぁ・・・。
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNGどういうバグ?
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNGMSBだけが1の時は負数を表現してる事になる
たとえば16ビットなら -0x8000 これは負数だから2の整数べき乗ではありえない
0039デフォルトの名無しさん
NGNG>>30 のやつで、x = 1 、つまり x = 2^0 が true と
判別されるんだが・・・。一応使える。
0040いつでもどこでも名無しさん
NGNGとかどうだ。
Assemberのマクロで昔書いた物だ...
0041デフォルトの名無しさん
NGNGhttp://piza.2ch.net/test/read.cgi?bbs=tech&key=984447845
の 35 は log(n)に比例する時間で処理は出来るけど
それより早い方法があるのかな?
0042ネタ
NGNGオラ、フンドシなんて身につけないんだけど、
パンツなら身に着けるぞ。
ところで、オラのパンツさ履いてどうだったべか?
履き心地はどうだべか?
0043デフォルトの名無しさん
NGNGint i;
int y;
for(i=1;i<1000000000;i++){
y=2;
y=y^i;
if(a==i){
return TRUE;
}
return FALSE;
}
どこまでも測定可能。
004443
NGNG0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG検索エンジンで探せばすぐ見つかると思うんだが・・・。
辞書とかも使ってみては?
004743
NGNGなーんだそういうことか。じゃあ43のでいいな。まさか1億もべき乗するやつなんていないだろう。
あっ、
if(a==0)
return FALSE;
を上のほうに入れてね!
004843
NGNGif(a==y){
return TRUE;
}
だった。
0049デフォルトの名無しさん
NGNG「1つの変数に1億ビット=12.5メガバイト使う計算がどこにある!」
と突っ込んでおこう。
0050デフォルトの名無しさん
NGNGね、ネタなんだよねぇ…?
0051デフォルトの名無しさん
NGNG世の中、君が思っているほどまともじゃない
005249
NGNGまあ、金曜の夜で頭の中がテンパってるからなあ。
とりあえず、逝ってくるよ。
005343
NGNG005443
NGNG0055デフォルトの名無しさん
NGNGint 型の数値の表現範囲を考えてみようや。
005643
NGNGVC++6ではとおったんですが
005750
NGNGふむ。つーか俺も4-48って何やってるんだ…。
>>55
まぢれす。
・ ^ は累乗じゃねぇ。
・int y に 2 の 100乗だの1000乗だのなんざ入らん。
・return FALSE; の前で for の } を閉じろ。
・a==1 の時もTRUEになるようにしてやってくれ。
・aが2のべき乗じゃなかったら10億回ループしないとFALSEが帰ってこないのは嫌だぞ。
など。
0058デフォルトの名無しさん
NGNG>>55 じゃなくて >>56 だ。逝ってくる。
005943
NGNGやばかった・・・
スマソです>ALL
0060デフォルトの名無しさん
NGNG榕タ
0061デフォルトの名無しさん
NGNGなくならんのよ。仕様ですか?
006240
NGNGn桁の精度で求めるには log(n) でできたぞゴルァ。
#define FP_SHIFT 15 /* assert(FP_SHIFT * 2 + 2 < bit of int) */
#define FP(n) ((n) << FP_SHIFT)
int
log2(unsigned int n)
{
int v = 0;
int i, step;
if (n <= 0) return -1;
/* find most siginicant set bit: log(N) */
i = 16;
step = 8;
while ((n >> i) != 1) {
assert(step != 0);
if (n >> i) {
i += step;
} else {
i -= step;
}
step /= 2;
}
/* fix the interger part */
v = i - FP_SHIFT;
if (v < 0) {
n <<= (-v);
} else {
n >>= v;
}
v <<= FP_SHIFT;
/* calculate more precisely... */
for (i = FP(1) / 2; i; i >>= 1) {
assert(n >= FP(1) && n < FP(2));
n = (n * n) >> FP_SHIFT;
if (n >= FP(2)) {
v += i; n /= 2;
}
}
return v;
}
006340
NGNGffs(3) 相当のことを O(log(n)) でやってるけど、
BSDの ffsの実装見てみたら O(n) だったぞ。n= bit数だけど。
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNG↑より参照
コンピュータで扱う最小の情報単位であるビット(2進数の1桁ずつ)に対する演算。
基本的な演算命令として「and」「or」「not」などがある。
データ読み書きでは、ビットを8桁分並べたバイトという単位が最小の単位になる。
ってことは、2のべき乗(0乗は除く)にのみビット演算が有効ってわけ?
0066デフォルトの名無しさん
NGNGたとえばmod演算とかも2のべき乗には1命令で出来ます。
n mod 8 = n and 7
が、2のベキ乗でない mod 演算も、これを利用して実現する事が可能です
0067デフォルトの名無しさん
NGNGBOOL Hikaku(INTTYPE i)
INTTYPE j = 1;
do {
if ( i == j ) return TRUE;
if ( i < j ) return FALSE;
j <<= 1;
} while ( j != 1 )
return FALSE;
}
じゃだめかな?
0068デフォルトの名無しさん
NGNGINTTYPE は unsigned 限定だ(^^;
0069デフォルトの名無しさん
NGNG2分検索でMSBの位置を見つけるアイデアって事なんだね
0070メモ
NGNG#define LSSB(n) ((n) & ~(n-1))
0071デフォルトの名無しさん
NGNG個の場合数えるべき演算数は総シフトビット数(vビットのシフトの
コストは v) だから、これ log n じゃないと思われ。
というか、桁数が大きくなったときのことを考えれば、 > 演算も
O(n) だからそもそも使えない。ビット数は高々定数値 (32とか)
というなら、bsd のやり方でも constant order で優劣は無い。
007271
NGNG62 のコストは比較演算子の n で、log n 回だけ回るのでこの
アルゴリズムは order n log n 、となる、のか。
0073デフォルトの名無しさん
NGNG0074メモ
NGNG0075デフォルトの名無しさん
NGNG70だと負数が 1 の補数でも使えるから汎用性が高いよ。
(まったく無意味なコメントでごめんね)
007662
NGNGshiftと比較が O(1)でできるって前提で。
まあ、constant orderなのはたしかだけど、
高々 5回の比較でできるってことで。
0077デフォルトの名無しさん
NGNGループになら書けるんだけどなあ
int i;
for(i=0;i<n;i++){
r<<=1;
if((dt) & 0x80000000){dt=(dt<<1)|1}; else (dt)<<=1;
}
0078デフォルトの名無しさん
NGNGreturn (dt<<n) | (dt>>(sizeof(int)-n));
007978
NGNGreturn (dt<<n) | (dt>>(sizeof(int)*8-n));
0080デフォルトの名無しさん
NGNG008177
NGNGおお! 感激です
こんなことがしたかったんで、
bitGet(unsigned &dt, int n)
{ unsigned r = dt & ( ( 1u<<n ) -1 );
ROL(dt,n);
return r;
}
bcc32だとROLでループ使ってるとinline展開されなかったんですよ
0082デフォルトの名無しさん
NGNGで説明をしているものが多いです。私自身は「a^n は 1 に a を n 回かけた
もの」と教えているので 0 乗を特別扱いしません。
0083デフォルトの名無しさん
NGNGその考え、おかしいし通用しないよ。
0084デフォルトの名無しさん
NGNG>>82は小学校の教師でしょ。
小学生にはわかり易い説明だと思うよ。
中高生には通用しないけど。
0085デフォルトの名無しさん
NGNGけどさぁ、最初から1があるのはおかしい。
確かにどの数字にも、その数字自体に1を掛けたものと
考えてもつじつまはあるけど、最初から1にとある
数値を掛けるってのはやっぱり変。
とある数値に1を掛けても、結果は変わらないというのなら
話しはわかる。
よって、上にあげられた説明はおかしい。
0086デフォルトの名無しさん
NGNG>a^n は 1 に a を n 回かけた
この a を n 回掛けた数値自体が何なわけ?
つまりこれが1だといっているようなもん。
だったら最初の1は要らねーだろ。
0087デフォルトの名無しさん
NGNGさらに、a を n 回というのにおいて、
n が 0だった場合、つまり0乗だった場合、
a が何であろうと、具体的な数値は出てきません。
0乗が1だという定義がなければ、82の結論は
出てこないはず。
0088デフォルトの名無しさん
NGNGc=0のときx=aじゃないの?
と言うわけで、b^0=1だと思うけど。
掛け算・割り算のデフォルト値は1、足し算・引き算のデフォルト値は0でしょう。
0089デフォルトの名無しさん
NGNGどうして?
0090デフォルトの名無しさん
NGNGa ^ b は、a を b 回掛け合わせたもの、
それぞれ b が 0 の時は単位元の 0 と 1 になる、
これが基本。ついでにいえば and の単位元は 1、
or の単位元は 0。
89 の「どうして」は、大きな「どうして」なんで、
僕には答えられない。数論を一から再記述するのは
とても大変だし、ほかの「どうして」が山ほどでて
くるだけだから。
0091デフォルトの名無しさん
NGNGa^n がどうのこうの言う前に、
>>82
>a^n は 1 に a を n 回かけた
についておかしいといっているのだ。
なぜ最初に1に何かを掛けるのか?
別に間違いじゃないが、a^0 = 1 じゃなきゃ
これは成り立たない。
それに a を 0 回掛けた値が最初から1だと
言っているわけであり、どこからか
a^0 = 1 が出てしまっているのに、
なぜかわざわざワケの分からない考え方をしているか。
a^0 = 1 を説明するには不十分だ。
0092デフォルトの名無しさん
NGNG0093みんな数学板行けや
NGNGα^x:=α×α×... (x回繰り返し)
という定義からはα^0は出てこない
定義より
α^x×α^y=α^(x+y)
ここで負数の累乗を考える
α^x×α^-y=α^(x-y)
から
1
α^-y=−−−
α^y
で
α^x
α^x × α^-x = α^0 =−− = 1
α^x
となってキレイだからα^0=1と負数の累乗は導入された
つーか久しぶりに数I思い出したよ。
0094デフォルトの名無しさん
NGNGおかしな説明をしているといってるのであり、
a^0 = 1 を証明しろと言っているわけではないのだが・・・。
0095デフォルトの名無しさん
NGNGa^0 = 1 の証明について
おかしな証明をしていたんだとしても
>>93 ので納得すればいいんじゃないの?
ていうかプログラマ―には理屈は不要。
あんた達は我々の出す仕様にのっとって
コードを吐きつづければいいのだよ。
0097ぷもぉ
NGNG0098デフォルトの名無しさん
NGNGn回叩けばビスケットは2のn乗
0099数学通
NGNGa^xのx→0の極限が1ってだけのもの。
だから1としといたほうがa^xがxの全域で連続になるから
そうしているだけです。
0100デフォルトの名無しさん
NGNGそもそも a = 0 のときは、極限は 1 じゃないし...
0101デフォルトの名無しさん
NGNGもしかしたら画期的な公理系が発見できるかもよ?
習ったコトが「正しい」とは思わないことだ。
単に現実的に「便利」だから、採用されているに過ぎないのだよ<現在の公理系
マニュアル文化に育った馬鹿どもか?おまーら?
0102デフォルトの名無しさん
NGNGa^0 ≠1 の例としては面白くないけど。
0103デフォルトの名無しさん
NGNGあんたが一番バカなお答えをしています。
0104>100
NGNG0乗の値は単なる定義なの!別に100でも200でもそう定義すれば
それでもOKなんだけどa^xのx=0での連続性を要求するとa^0を1と
定義したほうが都合がいいってだけの話。
0105デフォルトの名無しさん
NGNGそう、そういうこと。
0106デフォルトの名無しさん
NGNG数学(解析学)だと一般の指数関数はeを底にする場合の拡張で、
よく知られているように
exp x = 1 + x/1! + x^2/2! + x^3/3! ... x^n/n! ...
です。これは、解析学では、指数関数を「展開した式」ではなく、
指数関数の「定義」です。
exp 0 は極限とは関係なく当然 1 です。
0107デフォルトの名無しさん
NGNG2 や 3 の定義を考えてみれば、 n^1 = 1 x n というのも別におかしくないような気がするが、ここまでくると単に混乱してるだけかもしれん。
0108デフォルトの名無しさん
NGNG〔(ギリシヤ) philosophia は知恵への愛・希求の意。
西周(にしあまね)の訳語。賢哲の希求を表すために「希哲学」と訳したが、後「哲学」とした〕
(1)世界や人間についての知恵・原理を探究する学問。
もと臆見や迷妄を超えた真理認識の学問一般をさしたが、
次第に個別諸科学が独立し、通常これらと区別される。
存在論(形而上学)、認識論(論理学)、実践論(倫理学)、
感性論(美学)などの部門をもつ。
(2)自分自身の経験などから得られた基本的な考え。人生観。「社長の経営術には一つの―がある」
0109デフォルトの名無しさん
NGNGさすがに字引の解説は文句のつけようがないぐらい
妥当な説明だな。
011082
NGNG話をかき乱してしまって申し訳ないです。ただ,0乗が1であることを
前提にしているのではなく,乗法での単位元が1であることを前提に
しているだけだということは申し上げておきます。そもそもこの説明
だけで済ませることはありません。というかだいたいこのやり方は普
通の説明をしたあとで納得しない生徒を納得させる「手」の一つにす
ぎません。たとえば「aのn乗ってどういうこと?」と何人かに聞くと
「aをn回かけたもの」と答える者がいるので,「じゃぁ1乗は1回かけ
るんだよね。何にaを1回かけるんだろう」と聞くと1にかけたものであ
ると答えざるをえなくなります。もちろん言葉遊びではあるわけです
が,これで0乗を1とするのは妥当なものかもしれないという方向に生
徒の気持が動きかけたら,そこで元の普通の説明に戻ってたたみかけ
る,とかそんなことをするわけです。
そういう背景で使うやり方だということを説明せずに書いてしまった
ことで混乱を招いたことをお詫びします。
0111デフォルトの名無しさん
NGNG最後の「などの部門をもつ」というところが、何ともかわいいですね。
0112デフォルトの名無しさん
NGNGなるほど。まっ、完全に間違いってわけじゃないね。
う〜〜ん、難しい。
0113デフォルトの名無しさん
NGNG0114デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNG何気に大嘘書いてるのがいるな。0^0=1だろ。
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNGえぴすてーめーとか,その他,かっこつけている連中がどうしようもない
コードをこねくり回している間に 2ch では正解(というかエレガントな解)
がでていたのだよ。狭い井戸で吼えてるカエルどもの程度が知れてたのしかったわい。
0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNGやはり0乗は1だ!と定義しているようなもんですよね。
0自体何を掛けても0ですし・・・。
0122>121
NGNG前提が既に偽。
0123デフォルトの名無しさん
NGNG0125デフォルトの名無しさん
NGNG冪乗で増加する分布P(k)=k^{\gamma}を出力するときに
if(!(k&(k-1))&&k) fprintf(fp, "%d %f\n", k, P[k]);
で出力すると対数プロットをしたときにデータが等間隔になってハッピーです。
0126125
NGNG■ このスレッドは過去ログ倉庫に格納されています