• ベストアンサー

M系列の係数を教えてください

みなさんこんにちは、 32ビットCPUでM系列を発生させるプログラムをつくりたいのですが、係数がわかりません。 32ビット unsigned char 1個を記憶領域として使いたいのですが、その場合の最大次元の係数を教えてください。 どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • keyguy
  • ベストアンサー率28% (135/469)
回答No.7

またコピーで間違いが (1) 既約多項式どうかの判定はK={0,1}とし以下のようにする {x^32+x・f(x)+1|f(x)は30次以下の奇数項K係数多項式} の各元について {g(x)|g(x)は2次以上16次以下のK係数既約多項式} の元すべてについて割れないものを既約多項式とする (2) 1で求めた規約多項式h(x)が原始多項式かどうかの判定を以下のようにする((2^32-1)/3=1431655765に注意) x,x^2,x^3,x^4,・・・,x^1431655765 をh(x)で割ったあまりを i[1](x),i[2](x),i[3](x),・・・,i[1431655765](x) とすると i[n](x)が30次以下の場合には i[n+1](x)=x・i[n](x)であり i[n](x)が31次の場合には i[n+1](x)=x・i[n](x)+h(x)である (よってi[n+1](x)は31次以下である) このようにして1431655765番目まで求めその途中でi[・](x)が1になれば原始多項式でないので止めi[・](x)が最後まで1でなければh(x)は原始多項式である 以上は1つの原始多項式が求まればそこで止めれば良いのでそれほど計算時間はかからないでしょう 項数が少ないものをほしいので項数が少ないものから順に検査すれば良い

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

  • keyguy
  • ベストアンサー率28% (135/469)
回答No.6

(1) 既約多項式どうかの判定はK={0,1}とし以下のようにする {x^32+x・f(x)+1|f(x)は30次以下の奇数項K係数多項式} の各元について {g(x)|g(x)は2次以上15次以下のK係数既約多項式} の元すべてについて割れないものを既約多項式とする (2) 1で求めた規約多項式h(x)が原始多項式かどうかの判定を以下のようにする((2^32-1)/3=1431655765に注意) x,x^2,x^3,x^4,・・・,x^1431655765 をh(x)で割ったあまりを i[1](x),i[2](x),i[3](x),・・・,i[1431655765](x) とすると i[n](x)が30次以下の場合には i[n+1](x)=x・i[n](x)であり i[n](x)が31次の場合には i[n+1](x)=x・i[n](x)+h(x)である (よってi[n+1](x)は31次以下である) このようにして1431655765番目まで求めその途中でi[・](x)が1になれば原始多項式でないので止めi[・](x)が最後まで1でなければh(x)は原始多項式である 以上は1つの原始多項式が求まればそこで止めれば良いのでそれほど計算時間はかからないでしょう 項数が少ないものをほしいので項数が少ないものから順に検査すれば良い

全文を見る
すると、全ての回答が全文表示されます。
  • keyguy
  • ベストアンサー率28% (135/469)
回答No.5

コピーでやったので一部間違い (1) 既約多項式どうかの判定はK={0,1}とし以下のようにする {x^32+x・f(x)+1|f(x)は30次以下の奇数項K係数多項式} の各元について {x・g(x)+1|g(x)は15次以下の偶数項K係数多項式} の元すべてについて割れないものを既約多項式とする (2) 1で求めた規約多項式h(x)が原始多項式かどうかの判定を以下のようにする((2^32-1)/3=1431655765に注意) x,x^2,x^3,x^4,・・・,x^1431655765 をh(x)で割ったあまりを i[1](x),i[2](x),i[3](x),・・・,i[1431655765](x) とすると i[n](x)が30次以下の場合には i[n+1](x)=x・i[n](x)であり i[n](x)が31次の場合には i[n+1](x)=x・i[n](x)+h(x)である (よってi[n+1](x)は31次以下である) このようにして1431655765番目まで求めその途中でi[・](x)が1になれば原始多項式でないので止めi[・](x)が最後まで1でなければh(x)は原始多項式である 以上は1つの原始多項式が求まればそこで止めれば良いのでそれほど計算時間はかからないでしょう 項数が少ないものをほしいので項数が少ないものから順に検査すれば良い

全文を見る
すると、全ての回答が全文表示されます。
  • keyguy
  • ベストアンサー率28% (135/469)
回答No.4

(1) 既約多項式どうかの判定はK={0,1}とし以下のようにする F={x^32+x・g(x)+1|g(x)は30次以下の奇数項K係数多項式} の各元について H={x^16+x・i(x)+1|i(x)は14次以下の奇数項K係数多項式} の元すべてについて割れないものを既約多項式とする (2) 1で求めた規約多項式h(x)が原始多項式かどうかの判定を以下のようにする ((2^32-1)/3=1431655765に注意) x,x^2,x^3,x^4,・・・,x^1431655765 をh(x)で割ったあまりがすべて1でなければh(x)は原始多項式である n番目が31次でありj(x)だとするとn+1番目は j(x)・x+h(x) (31次以下)となる このようにして1431655765番目まで求めその途中で1になれば原始多項式でないので止める 以上は1つの原始多項式が求まればそこで止めれば良いのでそれほど計算時間はかからないでしょう

全文を見る
すると、全ての回答が全文表示されます。
  • keyguy
  • ベストアンサー率28% (135/469)
回答No.3

既約でない→既約の間違い (1) x^4+x+1 x^4+x^2+1 x^4+x^3+1 x^4+x^2+x+1 x^4+x^3+x+1 x^4+x^3+x^2+1 x^4+x^3+x^2+x+1 が既約かどうかを順に確かめる (x+1) (x^2+x+1)  で割れるかどうかを順に確かめれば良い (2次以上は3項以上係数が0でないはず) (項数が偶数の場合はx+1で割れるから項数が奇数の場合だけ検査することにすればx+1を割れるかどうか確かめなくても良い) (2) x^4+x+1が既約であることが判明したので原始かどうか確かめる 2^4-1=15=3×5 だからx^5をx^4+x+1で割ったあまりが1出ないならば原始 そのまま割ってもいいが次数が多い時のためにNo.1の方法を取る x^1,x^2,x^3,x^4=x+1,x・(x+1)=x^2+x よって5番目が1でないから x^4+x+1が原始多項式で有ることが分かる 5番目に達する前にに1になればそこで止めれば良いから計算数はもっと減る)

全文を見る
すると、全ての回答が全文表示されます。
  • keyguy
  • ベストアンサー率28% (135/469)
回答No.2

多少数について2倍ほど違うところがあったけれども考えからだけ受け取ってもらえれば幸いです イメージをつかむために4次の場合を考えよう (1) x^4+x+1 x^4+x^2+1 x^4+x^3+1 x^4+x^2+x+1 x^4+x^3+x+1 x^4+x^3+x^2+1 x^4+x^3+x^2+x+1 が既約かどうかを順に確かめる (x+1) (x^2+x+1)  で割れるかどうかを順に確かめれば良い (2次以上は3項以上係数が0でないはず) (2) x^4+x+1が既約でないことが判明したので原始かどうか確かめる 2^4-1=15=3×5 だからx^5をx^4+x+1で割ったあまりが1出ないならば原始 そのまま割ってもいいが次数が多い時のためにNo.1の方法を取る x^1,x^2,x^3,x^4=x+1,x・(x+1)=x^2+x よって5番目が1でないから x^4+x+1が原始多項式で有ることが分かる

全文を見る
すると、全ての回答が全文表示されます。
  • keyguy
  • ベストアンサー率28% (135/469)
回答No.1

周期2^32-1のM系列を求めたいのですか? {0,1}からなる体を係数とする32次原始多項式を求めればいいでしょう (1) f(x)=x^32+・・・+1 が既約多項式になっているかどうかを各「・・・」について総当りで調べてみる といっても割れるかどうかを確かめるのは 1つの多項式当たり x+1 から x^16+x^15+x^14+・・・+x^5+x^4+x^3+x^2+x^2+x+1 までだから3万通りあまりなのでそれほど時間がかからない (最上位係数と最下位係数が1だから2^14×2=2^15足らず) (2) f(x)が既約多項式で有った場合に x^((2^32-1)/3)=x^1431655765をf(x)でわったあまりが1にならなければ f(x)が原始多項式である 実際には x,x^2,x^3,・・・ においてx^32の項が出てきたら既約多項式で同一次数の係数同士EOR算し常に31次以下の多項式であるようにし その1431655765番目が1でならないならばf(x)が原始多項式である

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • M系列の乱数の検定

    多ビットのシフトレジスタをいくつか使って,M系列乱数を発生させるプログラム(verilog)を作りました。その結果、乱数の出力値が8~10桁です。そしてこの乱数の検定をするためにまずは度数検定をしたいのです。もしこの8~10桁の数字を1桁ずつばらばらにできれば、エクセルを使って、0~9の数字が等頻度で出ているか調べることができるのですが、そんなことはできないのでしょうか?? 乱数についてはこの2ヶ月で色々調べて、何も知らない状態から、やっと乱数発生までこぎつけました。これがまだ使い物になるとは思いませんが、とりあえずは検定をしたいので、ご指導よろしくお願いします。

  • 8個のビットを1バイトとして扱う方法

    1バイトをビット扱いする方法は、 union un_p1dr { unsigned char one_byte ; struct { unsigned char b7:1 ; unsigned char b6:1 ; unsigned char b5:1 ; unsigned char b4:1 ; unsigned char b3:1 ; unsigned char b2:1 ; unsigned char b1:1 ; unsigned char b0:1 ; } bit ; } ; #define pt_da_p1dr (*(volatile union un_p1dr *)0xffffd0) と宣言すれば、pt_da_p1dr.bit.b7 = 1 ;の様にビット扱いが出来ます。 この反対を行える宣言方法は、あるでしょうか? つまり、任意の1ビットを8ビット集め、プログラムでバイトにてアクセスしたいのですが・・・・ ARMなどは、ビットの扱いが容易に可能です。しかし、CPUの周辺関係事情より、バイトでのアクセスが 可能なように、ハード割り当てが出来ません。 従って、現在は、プログラムにて、ビットを集め、バイトにして、アクセスしています。 なにか良い宣言方法があれば、ご伝授していただけないでしょうか? 宜しくお願いいたします。

  • 配列を作った場合は、その結果は何に反映されるのですか?

    Linux上でC言語のプログラムを作るとして。。。 例えば unsigned char hoge[10]; という変数を宣言した場合と unsigned char hoge[]20]; という変数を宣言した場合とでは 生成モジュールのバイトすうは10バイトちがうのでしょうか? 配列を宣言した場合には、コンパイル時に領域確保されるとどこかのHPで見た記憶があるのですが、それが正しければ上に書いたように生成モジュールのバイト数が10バイト変るのかな・・・ また、その生成モジュールを実行した場合の使用メモリ量は(top,vmstat等で監視した場合)は、そういう差ってでてくるのでしょうか? 宜しくお願いいたします。

  • フローチャートについて

    H8マイコンでスイッチS1(PORT4-4)が押された場合は、LED1(PORT5-0)、スイッチS2(PORT4-5)が押された場合は、LED2(PORT5-1)、スイッチS3(PORT4-6)が押された場合は、LED3(PORT5-2)、スイッチS4(PORT4-7)が押された場合は、LED4(PORT5-3)が、それぞれ点灯するようなプログラムをつくりました。 #define P4DDR (* (volatile unsigned char *) 0xfffc5) #define P4DR (* (volatile unsigned char *) 0xfffc7) #define P4PCR (* (volatile unsigned char *) 0xfffda) #define P5DDR (* (volatile unsigned char *) 0xfffc8) #define P5DR (* (volatile unsigned char *) 0xfffca) int main(void) { unsigned char sw,ssw; P4DDR = 0x00; /* P4全ビットを入力に設定 */ P4PCR = 0xff; /* P4 MOSプルアップをONにする */ P5DDR = 0xff; /* P5全ビットを出力に設定 */ while (1) { sw = ~P4DR; /* 入力を反転 */ ssw = sw >> 4; /* swを4ビット右にシフトしたものをsswに代入 */ P5DR = ssw; /* sswをP5に出力 */ } return 0; } というプログラムを作ったのですが、フローチャートがどのようになるのかがわからないです。またプログラムが間違っていたら教えてください。

  • 切欠き係数について

    フィレットを有す丸棒材の疲労強度について検討をしています。 負荷条件としては、丸棒材は引張り荷重を受けている状態で、外力によるねじり・曲げ荷重を受ける物になります。 疲労強度検討のやり方について教えて下さい。 適用する考え方は、修正Goodman線図で考えています。 考え方 ?引張りによる発生応力(安定する物として)を平均応力とし、ねじり・曲げ荷重を外力による応力振幅とする ?フィレット部の切欠き係数を考慮  ・引張り応力×引張りによる切欠き係数=平均応力σm  ・せん断応力×せん断による切欠き係数=最大せん断応力τ  ・曲げ応力×曲げによる切欠き係数=最大曲げ応力σ ?曲げ応力とせん断応力を組み合わせて主応力を求める ?組合せた主応力を発生しうる応力振幅としてプロット ※同じフィレット部で引張り・曲げ・ねじり3つの成分が負荷される場合、  切欠き係数はそれぞれに適用すべきですか?  算出した応力振幅に対して、引張りによる切欠き係数を考慮すれば良い  などありますか?  過剰に見ている気がするのですが、文献にその旨説明が見当たらないの  で、参考になる情報など欲しいのですが・・・

  • 配列のビット設定方法

    以下のようにビットを設定する場合、どのようにすればよいのでしょうか? 効率よく設定したいのですが・・・。 // bit // 23 - 21:week1 // 20 - 18:week2 // 17 - 15:week3 // 14 - 12:week4 // 11 - 9:week5 // 8 - 6:week6 // 5 - 3:week7 // 2 - 0:week8 unsigned char week[3]; 上記の変数にこの変数の内容を設定する // 以下の変数の範囲は 0~7 unsigned char week1; unsigned char week2; unsigned char week3; unsigned char week4; unsigned char week5; unsigned char week6; unsigned char week7; unsigned char week8; ---------------- week[0] = ( week1 << 5 ) & ( week2 << 2 ) & ( week3 >> 1 )  ・ ・ ・ 上記のような感じで設定できると思うのですが、もっと効率的に方法はないでしょうか? 配列の数が多くなると面倒ですので。。。 よろしくお願いします。

  • FITCの吸光係数について

    蛍光色素である fluorescein isothiocyanate(FITC)の吸光係数についての質問です。 最大吸収波長である494nmの時の吸光係数(ε)は68,000 M-1 cm-1だと調べて分かりましたのですが、 吸収波長の値が280nmの時の場合の吸光係数(ε)はいくつの値になりますでしょうか? いくら調べても見つからなくて困ってます。どうかよろしくお願いします。

  • pic32mxのデータ幅

    初めてPIC32MXでプログラムを走らせようとしています。 MPLAB X IDEとXC32を使っています。 PIC18F等の8ビットCPUの経験はあります。 PIC32MXはアドレス幅32ビットデータ幅32ビットだと思ってプログラムを作り始めました。 デバックするところになって分からないことが出てきました。 XC32におけるint型のデータ幅は32ビット、unsigned char型は8ビットです。 プログラムで変数を定義するとunsigned char型は偶数アドレス、奇数アドレスそれぞで定義されます。 int型の配列を定義すると、偶数番地アドレスを先頭として4バイト単位で割り当てられます。 これは、PIC32MXがバイトアドレッシングCPUで4バイトアライメントということだと思います。(違ったらご指摘下さい。) 実際MPLAB X IDEでデータメモリを参照すると1アドレス1バイトデータで表示されます。 質問は、 PIC32MXは32ビットアドレス空間(実際に持っているROM、RMAサイズは別として) のCPUではあるが、メモリ幅は、8ビットというのではないだろうか? というものです。PIC32MXの内部レジスタ関連は32ビットなので32ビットCPUだとは思いますが、データシートにある「 32 ビットのネイティブデータ幅」という意味がわかりません。 実際のメモリ空間は、アドレス範囲 x 8ビットということでいいのでしょうか。 御教授いただけましたら幸いです。

  • C言語のビットフィールドについて

    はじめまして,今C言語を勉強中なのですが, ビットフィールドの宣言について質問があります。 勉強に使用しているテキストでは, ビットフィールドの宣言にはunsigned int型を使用すると書かれています(下記例参照)。 ここで質問は,unsigned charなどの型は推奨されない理由があるのか,ということです。 実際にunsigned char型で実行してもプログラムは動きますし,そちらのほうが語長も短くて済むのでいいような気がします。 テキストの書き方だと,他の型について言及していなかったので,なにか理由かあるのか,それとも特に問題ないのか,疑問に思っています。 わかる方いましたら,回答いただけると嬉しいです。 (ex) struct{ unsigned int bit0:1; unsigned int bit1:1; : unsigned int bit7:1; }bits;

  • int型(2バイト)データの分割

    int型(2バイト)データの分割 マイコンのフラッシュ領域にint型のデータ(2バイト)を 1バイトづつ書き込むのに以下のコードを考えています。 unsigned int data; unsigned char dat1,dat2; data = 555; dat1 = 0; dat2 = 0; dat1 = (char)data; dat2 = (char)data >> 8; 以下、dat1とdat2をフラッシュに書き込む。 未熟者でプログラムとして合っているのか解りません。 やり方として問題ないでしょうか? またもっと良い方法があればご教授願います。