いざ C 言語学習を始めて見ても、とりあえずの具体的なアウトプットを出そうとしないとただ言語を書いてみただけ、となってしまいそうです。ということで引き続き誤り訂正技術の中での必須演算、ガロア体における掛け算割り算をするプログラムを作ってみました。
前回は、与えられた数値から α^n を求めるものでしたが、掛け算割り算をするには α^n を数値に戻さなくてはいけません。
ということで、配列 alpha の逆方向配列 ialpha も作っておきます。そうしておいて、数値入力関数 scarf で数値二つを入力してそれぞれの掛け算割り算を行います。
プログラムはこうです。
#include <stdio.h>
int main(void)
{
int i,j;
int alpha[255];
int ialpha[255];
alpha[0] = 1;
for (i = 0;i <=254;i++)
{
alpha[i+1] = alpha[i] * 2;
if (alpha[i+1] >= 256)
{
alpha[i+1] = alpha[i+1] - 256;
alpha[i+1] = alpha[i+1] ^ 0x1d;
}
}
for (i = 1; i <=255; i++)
{
for (j = 0; j <=254; j++)
{
if (alpha[j] == i)
{
ialpha[i] = j;
}
}
}
int a, b, product, divide;
printf("a =");
scanf("%x", &a);
printf("b =");
scanf("%x", &b);
product = ialpha[a] + ialpha[b];
divide = ialpha[a] - ialpha[b] + 255;
printf("0x%02X x 0x%02X = 0x%02X\n", a, b,alpha[product % 255]);
printf("0x%02X / 0x%02X = 0x%02X\n", a, b,alpha[divide % 255]);
return 0;
}
ialpha は alpha 符号からサーチする方法で作りました。
結果はこうなります。
a =3c
b =2a
0x3C x 0x2A = 0x56
0x3C / 0x2A = 0xAE
続行するには何かキーを押してください . . .
一応昔の記事で手計算したものやエクセルマクロで計算したものと答えはあっているので、よさそうに思えます。
次は積和や多項式の計算になるのでしょうかね。続くかどうか...。
LTspice:「なんか、ちょっとやっただけで妙にうれしそうじゃん」
scilab:「しー、あんまりいじらないの!」
Excel:「でもこのレベルじゃスキルアップしたとはいえないんじゃない?」
画蔵:「ん、おまえらなんか云ったか?」
一同:「いえ、別に...」
前回は、与えられた数値から α^n を求めるものでしたが、掛け算割り算をするには α^n を数値に戻さなくてはいけません。
ということで、配列 alpha の逆方向配列 ialpha も作っておきます。そうしておいて、数値入力関数 scarf で数値二つを入力してそれぞれの掛け算割り算を行います。
プログラムはこうです。
#include <stdio.h>
int main(void)
{
int i,j;
int alpha[255];
int ialpha[255];
alpha[0] = 1;
for (i = 0;i <=254;i++)
{
alpha[i+1] = alpha[i] * 2;
if (alpha[i+1] >= 256)
{
alpha[i+1] = alpha[i+1] - 256;
alpha[i+1] = alpha[i+1] ^ 0x1d;
}
}
for (i = 1; i <=255; i++)
{
for (j = 0; j <=254; j++)
{
if (alpha[j] == i)
{
ialpha[i] = j;
}
}
}
int a, b, product, divide;
printf("a =");
scanf("%x", &a);
printf("b =");
scanf("%x", &b);
product = ialpha[a] + ialpha[b];
divide = ialpha[a] - ialpha[b] + 255;
printf("0x%02X x 0x%02X = 0x%02X\n", a, b,alpha[product % 255]);
printf("0x%02X / 0x%02X = 0x%02X\n", a, b,alpha[divide % 255]);
return 0;
}
ialpha は alpha 符号からサーチする方法で作りました。
結果はこうなります。
a =3c
b =2a
0x3C x 0x2A = 0x56
0x3C / 0x2A = 0xAE
続行するには何かキーを押してください . . .
一応昔の記事で手計算したものやエクセルマクロで計算したものと答えはあっているので、よさそうに思えます。
次は積和や多項式の計算になるのでしょうかね。続くかどうか...。
LTspice:「なんか、ちょっとやっただけで妙にうれしそうじゃん」
scilab:「しー、あんまりいじらないの!」
Excel:「でもこのレベルじゃスキルアップしたとはいえないんじゃない?」
画蔵:「ん、おまえらなんか云ったか?」
一同:「いえ、別に...」