C言語の2次元配列の謎仕様とオレオレマトリックス

これの続き

https://qiita.com/Soluna_Eureka/items/8ff36a03c0bdf7d91de3




# 概要

+ 前回に続き配列の勉強を始めた
    + `char`の配列は扱わない
+ オブジェクト指向なオレオレマトリックスを実装した
+ 具体的にはオレオレ構造体に2次元配列をぶち込んだ
    + メモリ（配置と総量）がガバ
    + 1次元配列の方が良いんじゃ（感想に後述する）
+ ついでに行列積を実装した
    + 計算量がガバ（$O(n)=3$）
+ その他の要素はだいたい前回と同じだと思って良いよ



# 設計方針

+ 前回の反省からオレオレオブジェクト専用オレオレ関数は引数をアドレス渡しで実装することにした
    + 4通りのコーディング規約でミニコンペやった結果，記法を変えるためだけにアドレスを1つ食う自己参照構造体を使うのは非効率だという結論が出た
    + **配列のポインタを持つだけのオレオレマトリックス**は避ける，オレオレオブジェクトはオレオレオブジェクト以外を参照しないと決めているのだ




# 以下，出来上がったもの

```objMtx2d.h
#ifndef objMtx2d
#define objMtx2d


// matrix method

typedef struct mtx2d {
    int row;
    int clm;
    long double mtx[5][5]; // set enough large size
} mtx2d;

mtx2d defmtx2d(int row, int clm, long double num[row][clm]);

void expmtx2d(mtx2d *adr);

void prdmtx2d(mtx2d *adr0, mtx2d *adr1, mtx2d *adr2);


#endif
```

```objMtx2d.c
#include <stdlib.h>
#include <stdio.h>

#include "objMtx2d.h"


mtx2d defmtx2d(int row, int clm, long double mtx[row][clm]) {
    mtx2d themtx = *((mtx2d*)calloc(1,2*sizeof(int)+(row*clm)*sizeof(long double)));
    themtx.row = row;
    themtx.clm = clm;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < clm; j++){
            themtx.mtx[i][j] = mtx[i][j];
        }
    }
    return (themtx);
};

void expmtx2d(mtx2d *adr){
    printf("mtx2d =");
    for (int i = 0; i < (adr->row); i++) {
        printf("\n");
        for (int j = 0; j < (adr->clm); j++){
            printf("%Lf, ",(adr->mtx)[i][j]);
        }
    }
    printf("\n");
};

void prdmtx2d(mtx2d *adr0, mtx2d *adr1, mtx2d *adr2){

    int row0 = adr0->row;
    int clm0 = adr0->clm;

    int row1 = adr1->row;
    int clm1 = adr1->clm;
    long double mtx1[row1][clm1];
    for (int i = 0; i < row1; i++) {
        for (int j = 0; j < clm1; j++) {
                mtx1[i][j] = adr1->mtx[i][j];
        }
    }

    int row2 = adr2->row;
    int clm2 = adr2->clm;
    long double mtx2[row2][clm2];
    for (int i = 0; i < row2; i++) {
        for (int j = 0; j < clm2; j++) {
                mtx2[i][j] = adr2->mtx[i][j];
        }
    }
    
    printf("(clm1: %d == row2: %d), ",clm1,row2);
    printf("(clm0: %d == clm2: %d), ",clm0,clm2);
    printf("(raw0: %d == row1: %d)\n",row0,row1);

    long double temp;
    if ((clm1 == row2) && (clm0 == clm2) && (row0 == row1)) {
        printf("condition true : calc production of mtx2d\n");
        for (int i = 0; i < row0; i++) {
            for (int j = 0; j < clm0; j++) {
                temp = 0;
                for (int k = 0; k < row2; k++) {
                    temp = temp + (mtx1[i][k])*(mtx2[k][j]);
                }
                adr0->mtx[i][j] = temp;
            }
        }
    } else {
        printf("condition false : return original matrix\n");
    }
};
```

```main.c
#include <stdlib.h>
#include <stdio.h>
#include "objMtx2d.h"


int main(){

    int row = 1;
    int clm = 1;
    long double num[row][clm];
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < clm; j++) {
            num[i][j] = (long double)(0);
        }
    }
    mtx2d mtx = defmtx2d(row, clm, num);

    int row0 = 3;
    int clm0 = 3;
    long double num0[row0][clm0];
    for (int i = 0; i < row0; i++) {
        for (int j = 0; j < clm0; j++) {
            num0[i][j] = (long double)(1);
        }
    }
    mtx2d mtx0 = defmtx2d(row0, clm0, num0);

    int row1 = 4;
    int clm1 = 4;
    long double num1[row1][clm1];
    for (int i = 0; i < row1; i++) {
        for (int j = 0; j < clm1; j++) {
            num1[i][j] = (long double)((i+j+1));
        }
    }
    mtx2d mtx1 = defmtx2d(row1, clm1, num1);

    int row2 = 5;
    int clm2 = 5;
    long double num2[row2][clm2];
    for (int i = 0; i < row2; i++) {
        for (int j = 0; j < clm2; j++) {
            num2[i][j] = (long double)((i+1)*(j+1));
        }
    }
    mtx2d mtx2 = defmtx2d(row2, clm2, num2);

    printf("mtx : ");
    expmtx2d(&mtx);
    printf("mtx0 : ");
    expmtx2d(&mtx0);
    printf("mtx1 : ");
    expmtx2d(&mtx1);
    printf("mtx2 : ");
    expmtx2d(&mtx2);


    for (int i = 0; i < 14; i++){
        prdmtx2d(&mtx0, &mtx0, &mtx0);
        printf("mtx0 : ");
        expmtx2d(&mtx0);
    }



    return(0);
}
```



## 機能

+ オレオレマトリックスの定義
    + ただし**構造体の定義で最大サイズが決定される**，超えたらデータが消える
    + 構造体の配列の初期化とメモリの関係がよくわからないせいかも（感想に後述）
+ オレオレマトリックスの乗算
    + チェック機能を入れたりした，文献は多くあるので
+ `main()`では以下を意図しているぜ
    + $0\times0$の単位行列でスタート
    + いろんなアルゴリズムで行列を生成
    + 一気に行列を定義しても問題がない
    + 行列の乗算のテスト（これは累乗）



## コンパイル，実行

```makefile
NAME	=	test.exe
SRMN	=	main.c
SRSB	=	objMtx2d.c
OBMN	=	test.exe
OBSB	=	$(SRSB:%.c=%.o)
GCCC	=	clang
GCOP	=	-std=c11 -O2

make	:	$(SRMN) $(SRSB)
	$(GCCC) $(GCOP) $(SRMN) $(SRSB) -o $(OBMN)
```

```zsh
% make
% ./test.exe
mtx : mtx2d =
0.000000, 
mtx0 : mtx2d =
1.000000, 1.000000, 1.000000, 
1.000000, 1.000000, 1.000000, 
1.000000, 1.000000, 1.000000, 
mtx1 : mtx2d =
1.000000, 2.000000, 3.000000, 4.000000, 
2.000000, 3.000000, 4.000000, 5.000000, 
3.000000, 4.000000, 5.000000, 6.000000, 
4.000000, 5.000000, 6.000000, 7.000000, 
mtx2 : mtx2d =
1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 
2.000000, 4.000000, 6.000000, 8.000000, 10.000000, 
3.000000, 6.000000, 9.000000, 12.000000, 15.000000, 
4.000000, 8.000000, 12.000000, 16.000000, 20.000000, 
5.000000, 10.000000, 15.000000, 20.000000, 25.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
3.000000, 3.000000, 3.000000, 
3.000000, 3.000000, 3.000000, 
3.000000, 3.000000, 3.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
27.000000, 27.000000, 27.000000, 
27.000000, 27.000000, 27.000000, 
27.000000, 27.000000, 27.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
2187.000000, 2187.000000, 2187.000000, 
2187.000000, 2187.000000, 2187.000000, 
2187.000000, 2187.000000, 2187.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
14348907.000000, 14348907.000000, 14348907.000000, 
14348907.000000, 14348907.000000, 14348907.000000, 
14348907.000000, 14348907.000000, 14348907.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
617673396283947.000000, 617673396283947.000000, 617673396283947.000000, 
617673396283947.000000, 617673396283947.000000, 617673396283947.000000, 
617673396283947.000000, 617673396283947.000000, 617673396283947.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
1144561273430837494845183885312.000000, 1144561273430837494845183885312.000000, 1144561273430837494845183885312.000000, 
1144561273430837494845183885312.000000, 1144561273430837494845183885312.000000, 1144561273430837494845183885312.000000, 
1144561273430837494845183885312.000000, 1144561273430837494845183885312.000000, 1144561273430837494845183885312.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
3930061525912861056856039664195120899525747653564164619632640.000000, 3930061525912861056856039664195120899525747653564164619632640.000000, 3930061525912861056856039664195120899525747653564164619632640.000000, 
3930061525912861056856039664195120899525747653564164619632640.000000, 3930061525912861056856039664195120899525747653564164619632640.000000, 3930061525912861056856039664195120899525747653564164619632640.000000, 
3930061525912861056856039664195120899525747653564164619632640.000000, 3930061525912861056856039664195120899525747653564164619632640.000000, 3930061525912861056856039664195120899525747653564164619632640.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
46336150792381577580441239896895688970594296724344342106277055401576891261935051484049504936756506018444052709181594009600.000000, 46336150792381577580441239896895688970594296724344342106277055401576891261935051484049504936756506018444052709181594009600.000000, 46336150792381577580441239896895688970594296724344342106277055401576891261935051484049504936756506018444052709181594009600.000000, 
46336150792381577580441239896895688970594296724344342106277055401576891261935051484049504936756506018444052709181594009600.000000, 46336150792381577580441239896895688970594296724344342106277055401576891261935051484049504936756506018444052709181594009600.000000, 46336150792381577580441239896895688970594296724344342106277055401576891261935051484049504936756506018444052709181594009600.000000, 
46336150792381577580441239896895688970594296724344342106277055401576891261935051484049504936756506018444052709181594009600.000000, 46336150792381577580441239896895688970594296724344342106277055401576891261935051484049504936756506018444052709181594009600.000000, 46336150792381577580441239896895688970594296724344342106277055401576891261935051484049504936756506018444052709181594009600.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
6441116610762971699604786972075827240991111134226371557890839505381727722959583218110803621947938397785075523545125817931881102592633088605277064533820541832989122656660547839334241610630219753859921180228190705776676535411167326231925937405952.000000, 6441116610762971699604786972075827240991111134226371557890839505381727722959583218110803621947938397785075523545125817931881102592633088605277064533820541832989122656660547839334241610630219753859921180228190705776676535411167326231925937405952.000000, 6441116610762971699604786972075827240991111134226371557890839505381727722959583218110803621947938397785075523545125817931881102592633088605277064533820541832989122656660547839334241610630219753859921180228190705776676535411167326231925937405952.000000, 
6441116610762971699604786972075827240991111134226371557890839505381727722959583218110803621947938397785075523545125817931881102592633088605277064533820541832989122656660547839334241610630219753859921180228190705776676535411167326231925937405952.000000, 6441116610762971699604786972075827240991111134226371557890839505381727722959583218110803621947938397785075523545125817931881102592633088605277064533820541832989122656660547839334241610630219753859921180228190705776676535411167326231925937405952.000000, 6441116610762971699604786972075827240991111134226371557890839505381727722959583218110803621947938397785075523545125817931881102592633088605277064533820541832989122656660547839334241610630219753859921180228190705776676535411167326231925937405952.000000, 
6441116610762971699604786972075827240991111134226371557890839505381727722959583218110803621947938397785075523545125817931881102592633088605277064533820541832989122656660547839334241610630219753859921180228190705776676535411167326231925937405952.000000, 6441116610762971699604786972075827240991111134226371557890839505381727722959583218110803621947938397785075523545125817931881102592633088605277064533820541832989122656660547839334241610630219753859921180228190705776676535411167326231925937405952.000000, 6441116610762971699604786972075827240991111134226371557890839505381727722959583218110803621947938397785075523545125817931881102592633088605277064533820541832989122656660547839334241610630219753859921180228190705776676535411167326231925937405952.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
124463949580340014419653854881293695482547961419230733163334979753855664989390762785569734892562797392553558135682283731822586600417439939647875174652473451375277645491415471369918673160129080236883344839284813214990428321837837369612888003083665267539128437282191029741136872138937569842828636845985894146502574920841897524653835593001003177246344623704015411308725532117281723059709552260302528572382799541182616410744022608272022375212282230934581248044375379465853143710073053308256256.000000, 124463949580340014419653854881293695482547961419230733163334979753855664989390762785569734892562797392553558135682283731822586600417439939647875174652473451375277645491415471369918673160129080236883344839284813214990428321837837369612888003083665267539128437282191029741136872138937569842828636845985894146502574920841897524653835593001003177246344623704015411308725532117281723059709552260302528572382799541182616410744022608272022375212282230934581248044375379465853143710073053308256256.000000, 124463949580340014419653854881293695482547961419230733163334979753855664989390762785569734892562797392553558135682283731822586600417439939647875174652473451375277645491415471369918673160129080236883344839284813214990428321837837369612888003083665267539128437282191029741136872138937569842828636845985894146502574920841897524653835593001003177246344623704015411308725532117281723059709552260302528572382799541182616410744022608272022375212282230934581248044375379465853143710073053308256256.000000, 
124463949580340014419653854881293695482547961419230733163334979753855664989390762785569734892562797392553558135682283731822586600417439939647875174652473451375277645491415471369918673160129080236883344839284813214990428321837837369612888003083665267539128437282191029741136872138937569842828636845985894146502574920841897524653835593001003177246344623704015411308725532117281723059709552260302528572382799541182616410744022608272022375212282230934581248044375379465853143710073053308256256.000000, 124463949580340014419653854881293695482547961419230733163334979753855664989390762785569734892562797392553558135682283731822586600417439939647875174652473451375277645491415471369918673160129080236883344839284813214990428321837837369612888003083665267539128437282191029741136872138937569842828636845985894146502574920841897524653835593001003177246344623704015411308725532117281723059709552260302528572382799541182616410744022608272022375212282230934581248044375379465853143710073053308256256.000000, 124463949580340014419653854881293695482547961419230733163334979753855664989390762785569734892562797392553558135682283731822586600417439939647875174652473451375277645491415471369918673160129080236883344839284813214990428321837837369612888003083665267539128437282191029741136872138937569842828636845985894146502574920841897524653835593001003177246344623704015411308725532117281723059709552260302528572382799541182616410744022608272022375212282230934581248044375379465853143710073053308256256.000000, 
124463949580340014419653854881293695482547961419230733163334979753855664989390762785569734892562797392553558135682283731822586600417439939647875174652473451375277645491415471369918673160129080236883344839284813214990428321837837369612888003083665267539128437282191029741136872138937569842828636845985894146502574920841897524653835593001003177246344623704015411308725532117281723059709552260302528572382799541182616410744022608272022375212282230934581248044375379465853143710073053308256256.000000, 124463949580340014419653854881293695482547961419230733163334979753855664989390762785569734892562797392553558135682283731822586600417439939647875174652473451375277645491415471369918673160129080236883344839284813214990428321837837369612888003083665267539128437282191029741136872138937569842828636845985894146502574920841897524653835593001003177246344623704015411308725532117281723059709552260302528572382799541182616410744022608272022375212282230934581248044375379465853143710073053308256256.000000, 124463949580340014419653854881293695482547961419230733163334979753855664989390762785569734892562797392553558135682283731822586600417439939647875174652473451375277645491415471369918673160129080236883344839284813214990428321837837369612888003083665267539128437282191029741136872138937569842828636845985894146502574920841897524653835593001003177246344623704015411308725532117281723059709552260302528572382799541182616410744022608272022375212282230934581248044375379465853143710073053308256256.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
46473824235412263755978134112835368131560194921502328749601828231990635994626715194824563401350721101953829823582892400888813058014414453609560392929971404645433550304050434818880460325582796054741841411179903953621375585945153814526147224821501015406343078952178147470174458602664228659680756574839144410024933595855562483030647808658279121849189013407887023014268921602919602221256346179393939216936316431034290583845031853342588518146605182247212196903301453006122253228527568675960210459739645882524863119328545974792107498090708040334466377529024324675975114983970754730545526983508559475608516579838407866848617855124866810254718819976369110029149829420715251914797520614402138443130935064484512030599334460394809369077014630548147215646539402719971324994072453116756050768829750276635579237375103313982181368212127703736957378573683790403332349416239262746725078031422969847438785968130317262384356804054824673287438491585599423639970822171445619235294276204888953192448.000000, 46473824235412263755978134112835368131560194921502328749601828231990635994626715194824563401350721101953829823582892400888813058014414453609560392929971404645433550304050434818880460325582796054741841411179903953621375585945153814526147224821501015406343078952178147470174458602664228659680756574839144410024933595855562483030647808658279121849189013407887023014268921602919602221256346179393939216936316431034290583845031853342588518146605182247212196903301453006122253228527568675960210459739645882524863119328545974792107498090708040334466377529024324675975114983970754730545526983508559475608516579838407866848617855124866810254718819976369110029149829420715251914797520614402138443130935064484512030599334460394809369077014630548147215646539402719971324994072453116756050768829750276635579237375103313982181368212127703736957378573683790403332349416239262746725078031422969847438785968130317262384356804054824673287438491585599423639970822171445619235294276204888953192448.000000, 46473824235412263755978134112835368131560194921502328749601828231990635994626715194824563401350721101953829823582892400888813058014414453609560392929971404645433550304050434818880460325582796054741841411179903953621375585945153814526147224821501015406343078952178147470174458602664228659680756574839144410024933595855562483030647808658279121849189013407887023014268921602919602221256346179393939216936316431034290583845031853342588518146605182247212196903301453006122253228527568675960210459739645882524863119328545974792107498090708040334466377529024324675975114983970754730545526983508559475608516579838407866848617855124866810254718819976369110029149829420715251914797520614402138443130935064484512030599334460394809369077014630548147215646539402719971324994072453116756050768829750276635579237375103313982181368212127703736957378573683790403332349416239262746725078031422969847438785968130317262384356804054824673287438491585599423639970822171445619235294276204888953192448.000000, 
46473824235412263755978134112835368131560194921502328749601828231990635994626715194824563401350721101953829823582892400888813058014414453609560392929971404645433550304050434818880460325582796054741841411179903953621375585945153814526147224821501015406343078952178147470174458602664228659680756574839144410024933595855562483030647808658279121849189013407887023014268921602919602221256346179393939216936316431034290583845031853342588518146605182247212196903301453006122253228527568675960210459739645882524863119328545974792107498090708040334466377529024324675975114983970754730545526983508559475608516579838407866848617855124866810254718819976369110029149829420715251914797520614402138443130935064484512030599334460394809369077014630548147215646539402719971324994072453116756050768829750276635579237375103313982181368212127703736957378573683790403332349416239262746725078031422969847438785968130317262384356804054824673287438491585599423639970822171445619235294276204888953192448.000000, 46473824235412263755978134112835368131560194921502328749601828231990635994626715194824563401350721101953829823582892400888813058014414453609560392929971404645433550304050434818880460325582796054741841411179903953621375585945153814526147224821501015406343078952178147470174458602664228659680756574839144410024933595855562483030647808658279121849189013407887023014268921602919602221256346179393939216936316431034290583845031853342588518146605182247212196903301453006122253228527568675960210459739645882524863119328545974792107498090708040334466377529024324675975114983970754730545526983508559475608516579838407866848617855124866810254718819976369110029149829420715251914797520614402138443130935064484512030599334460394809369077014630548147215646539402719971324994072453116756050768829750276635579237375103313982181368212127703736957378573683790403332349416239262746725078031422969847438785968130317262384356804054824673287438491585599423639970822171445619235294276204888953192448.000000, 46473824235412263755978134112835368131560194921502328749601828231990635994626715194824563401350721101953829823582892400888813058014414453609560392929971404645433550304050434818880460325582796054741841411179903953621375585945153814526147224821501015406343078952178147470174458602664228659680756574839144410024933595855562483030647808658279121849189013407887023014268921602919602221256346179393939216936316431034290583845031853342588518146605182247212196903301453006122253228527568675960210459739645882524863119328545974792107498090708040334466377529024324675975114983970754730545526983508559475608516579838407866848617855124866810254718819976369110029149829420715251914797520614402138443130935064484512030599334460394809369077014630548147215646539402719971324994072453116756050768829750276635579237375103313982181368212127703736957378573683790403332349416239262746725078031422969847438785968130317262384356804054824673287438491585599423639970822171445619235294276204888953192448.000000, 
46473824235412263755978134112835368131560194921502328749601828231990635994626715194824563401350721101953829823582892400888813058014414453609560392929971404645433550304050434818880460325582796054741841411179903953621375585945153814526147224821501015406343078952178147470174458602664228659680756574839144410024933595855562483030647808658279121849189013407887023014268921602919602221256346179393939216936316431034290583845031853342588518146605182247212196903301453006122253228527568675960210459739645882524863119328545974792107498090708040334466377529024324675975114983970754730545526983508559475608516579838407866848617855124866810254718819976369110029149829420715251914797520614402138443130935064484512030599334460394809369077014630548147215646539402719971324994072453116756050768829750276635579237375103313982181368212127703736957378573683790403332349416239262746725078031422969847438785968130317262384356804054824673287438491585599423639970822171445619235294276204888953192448.000000, 46473824235412263755978134112835368131560194921502328749601828231990635994626715194824563401350721101953829823582892400888813058014414453609560392929971404645433550304050434818880460325582796054741841411179903953621375585945153814526147224821501015406343078952178147470174458602664228659680756574839144410024933595855562483030647808658279121849189013407887023014268921602919602221256346179393939216936316431034290583845031853342588518146605182247212196903301453006122253228527568675960210459739645882524863119328545974792107498090708040334466377529024324675975114983970754730545526983508559475608516579838407866848617855124866810254718819976369110029149829420715251914797520614402138443130935064484512030599334460394809369077014630548147215646539402719971324994072453116756050768829750276635579237375103313982181368212127703736957378573683790403332349416239262746725078031422969847438785968130317262384356804054824673287438491585599423639970822171445619235294276204888953192448.000000, 46473824235412263755978134112835368131560194921502328749601828231990635994626715194824563401350721101953829823582892400888813058014414453609560392929971404645433550304050434818880460325582796054741841411179903953621375585945153814526147224821501015406343078952178147470174458602664228659680756574839144410024933595855562483030647808658279121849189013407887023014268921602919602221256346179393939216936316431034290583845031853342588518146605182247212196903301453006122253228527568675960210459739645882524863119328545974792107498090708040334466377529024324675975114983970754730545526983508559475608516579838407866848617855124866810254718819976369110029149829420715251914797520614402138443130935064484512030599334460394809369077014630548147215646539402719971324994072453116756050768829750276635579237375103313982181368212127703736957378573683790403332349416239262746725078031422969847438785968130317262384356804054824673287438491585599423639970822171445619235294276204888953192448.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
6479449017191976845284885233438089816275645517799666531122462921699683025830671700582471292904715695124539840006623495665475542481104908223177391979168382521687083369948432382069606287810245217627453907738840674699698004853610039266818536796570058008963195813757672646590660645806552624485934345844294905387103955542458338009186982296160765243701513669441451203268477493025378789555597712822122540668679029244183234805344644951663555100172900430280845293423918050968914319844528102377743450444067715266300545183226106379677851492981244926575133159499481020042866180968604943179348795515632261157153768924366196463385281100743383802549689929029584712014251588999648958525038815625612463203689950707239816109547920833228112245699993360599165364169699710381204091993943328996275370388347649792744804492769608407966381575691468019804649458755490352515104314037877155638653282162590011336350072818835455111849199881566861852187339442404350100265257192844605692092310815365281938337967228827864147384793409636744878827158437704876789888464675180473592530838339855120294515023888380338397093542856393262213429923309344998257625132320676127671576679845956819306194010900749579621077600120672095868980759955420932755813739466126616503895299414189337681880882094421980518249486563188328455886201077377715501586220873108819490358450189757308659188755760708843404237509002753041582734406696457917361015130255972944922145947304753924731682215836971712071343308086688750403275991573389990913748552992287021049764410658340282637811372792284515507794983999311853240549621953033910303743028822949651050403827865852328487473249652665450441403511636771519680335174685204157359702395343576511968114555883841285699068593776301254045829880568214472435726359108852003111166448055797793047117975060746078376370360591368113250262330503311346935116777042243606169637017427648782730262569867780740768147113920814883054772618895868488368503233232869519518179158464460942772640153600.000000, 6479449017191976845284885233438089816275645517799666531122462921699683025830671700582471292904715695124539840006623495665475542481104908223177391979168382521687083369948432382069606287810245217627453907738840674699698004853610039266818536796570058008963195813757672646590660645806552624485934345844294905387103955542458338009186982296160765243701513669441451203268477493025378789555597712822122540668679029244183234805344644951663555100172900430280845293423918050968914319844528102377743450444067715266300545183226106379677851492981244926575133159499481020042866180968604943179348795515632261157153768924366196463385281100743383802549689929029584712014251588999648958525038815625612463203689950707239816109547920833228112245699993360599165364169699710381204091993943328996275370388347649792744804492769608407966381575691468019804649458755490352515104314037877155638653282162590011336350072818835455111849199881566861852187339442404350100265257192844605692092310815365281938337967228827864147384793409636744878827158437704876789888464675180473592530838339855120294515023888380338397093542856393262213429923309344998257625132320676127671576679845956819306194010900749579621077600120672095868980759955420932755813739466126616503895299414189337681880882094421980518249486563188328455886201077377715501586220873108819490358450189757308659188755760708843404237509002753041582734406696457917361015130255972944922145947304753924731682215836971712071343308086688750403275991573389990913748552992287021049764410658340282637811372792284515507794983999311853240549621953033910303743028822949651050403827865852328487473249652665450441403511636771519680335174685204157359702395343576511968114555883841285699068593776301254045829880568214472435726359108852003111166448055797793047117975060746078376370360591368113250262330503311346935116777042243606169637017427648782730262569867780740768147113920814883054772618895868488368503233232869519518179158464460942772640153600.000000, 6479449017191976845284885233438089816275645517799666531122462921699683025830671700582471292904715695124539840006623495665475542481104908223177391979168382521687083369948432382069606287810245217627453907738840674699698004853610039266818536796570058008963195813757672646590660645806552624485934345844294905387103955542458338009186982296160765243701513669441451203268477493025378789555597712822122540668679029244183234805344644951663555100172900430280845293423918050968914319844528102377743450444067715266300545183226106379677851492981244926575133159499481020042866180968604943179348795515632261157153768924366196463385281100743383802549689929029584712014251588999648958525038815625612463203689950707239816109547920833228112245699993360599165364169699710381204091993943328996275370388347649792744804492769608407966381575691468019804649458755490352515104314037877155638653282162590011336350072818835455111849199881566861852187339442404350100265257192844605692092310815365281938337967228827864147384793409636744878827158437704876789888464675180473592530838339855120294515023888380338397093542856393262213429923309344998257625132320676127671576679845956819306194010900749579621077600120672095868980759955420932755813739466126616503895299414189337681880882094421980518249486563188328455886201077377715501586220873108819490358450189757308659188755760708843404237509002753041582734406696457917361015130255972944922145947304753924731682215836971712071343308086688750403275991573389990913748552992287021049764410658340282637811372792284515507794983999311853240549621953033910303743028822949651050403827865852328487473249652665450441403511636771519680335174685204157359702395343576511968114555883841285699068593776301254045829880568214472435726359108852003111166448055797793047117975060746078376370360591368113250262330503311346935116777042243606169637017427648782730262569867780740768147113920814883054772618895868488368503233232869519518179158464460942772640153600.000000, 
6479449017191976845284885233438089816275645517799666531122462921699683025830671700582471292904715695124539840006623495665475542481104908223177391979168382521687083369948432382069606287810245217627453907738840674699698004853610039266818536796570058008963195813757672646590660645806552624485934345844294905387103955542458338009186982296160765243701513669441451203268477493025378789555597712822122540668679029244183234805344644951663555100172900430280845293423918050968914319844528102377743450444067715266300545183226106379677851492981244926575133159499481020042866180968604943179348795515632261157153768924366196463385281100743383802549689929029584712014251588999648958525038815625612463203689950707239816109547920833228112245699993360599165364169699710381204091993943328996275370388347649792744804492769608407966381575691468019804649458755490352515104314037877155638653282162590011336350072818835455111849199881566861852187339442404350100265257192844605692092310815365281938337967228827864147384793409636744878827158437704876789888464675180473592530838339855120294515023888380338397093542856393262213429923309344998257625132320676127671576679845956819306194010900749579621077600120672095868980759955420932755813739466126616503895299414189337681880882094421980518249486563188328455886201077377715501586220873108819490358450189757308659188755760708843404237509002753041582734406696457917361015130255972944922145947304753924731682215836971712071343308086688750403275991573389990913748552992287021049764410658340282637811372792284515507794983999311853240549621953033910303743028822949651050403827865852328487473249652665450441403511636771519680335174685204157359702395343576511968114555883841285699068593776301254045829880568214472435726359108852003111166448055797793047117975060746078376370360591368113250262330503311346935116777042243606169637017427648782730262569867780740768147113920814883054772618895868488368503233232869519518179158464460942772640153600.000000, 6479449017191976845284885233438089816275645517799666531122462921699683025830671700582471292904715695124539840006623495665475542481104908223177391979168382521687083369948432382069606287810245217627453907738840674699698004853610039266818536796570058008963195813757672646590660645806552624485934345844294905387103955542458338009186982296160765243701513669441451203268477493025378789555597712822122540668679029244183234805344644951663555100172900430280845293423918050968914319844528102377743450444067715266300545183226106379677851492981244926575133159499481020042866180968604943179348795515632261157153768924366196463385281100743383802549689929029584712014251588999648958525038815625612463203689950707239816109547920833228112245699993360599165364169699710381204091993943328996275370388347649792744804492769608407966381575691468019804649458755490352515104314037877155638653282162590011336350072818835455111849199881566861852187339442404350100265257192844605692092310815365281938337967228827864147384793409636744878827158437704876789888464675180473592530838339855120294515023888380338397093542856393262213429923309344998257625132320676127671576679845956819306194010900749579621077600120672095868980759955420932755813739466126616503895299414189337681880882094421980518249486563188328455886201077377715501586220873108819490358450189757308659188755760708843404237509002753041582734406696457917361015130255972944922145947304753924731682215836971712071343308086688750403275991573389990913748552992287021049764410658340282637811372792284515507794983999311853240549621953033910303743028822949651050403827865852328487473249652665450441403511636771519680335174685204157359702395343576511968114555883841285699068593776301254045829880568214472435726359108852003111166448055797793047117975060746078376370360591368113250262330503311346935116777042243606169637017427648782730262569867780740768147113920814883054772618895868488368503233232869519518179158464460942772640153600.000000, 6479449017191976845284885233438089816275645517799666531122462921699683025830671700582471292904715695124539840006623495665475542481104908223177391979168382521687083369948432382069606287810245217627453907738840674699698004853610039266818536796570058008963195813757672646590660645806552624485934345844294905387103955542458338009186982296160765243701513669441451203268477493025378789555597712822122540668679029244183234805344644951663555100172900430280845293423918050968914319844528102377743450444067715266300545183226106379677851492981244926575133159499481020042866180968604943179348795515632261157153768924366196463385281100743383802549689929029584712014251588999648958525038815625612463203689950707239816109547920833228112245699993360599165364169699710381204091993943328996275370388347649792744804492769608407966381575691468019804649458755490352515104314037877155638653282162590011336350072818835455111849199881566861852187339442404350100265257192844605692092310815365281938337967228827864147384793409636744878827158437704876789888464675180473592530838339855120294515023888380338397093542856393262213429923309344998257625132320676127671576679845956819306194010900749579621077600120672095868980759955420932755813739466126616503895299414189337681880882094421980518249486563188328455886201077377715501586220873108819490358450189757308659188755760708843404237509002753041582734406696457917361015130255972944922145947304753924731682215836971712071343308086688750403275991573389990913748552992287021049764410658340282637811372792284515507794983999311853240549621953033910303743028822949651050403827865852328487473249652665450441403511636771519680335174685204157359702395343576511968114555883841285699068593776301254045829880568214472435726359108852003111166448055797793047117975060746078376370360591368113250262330503311346935116777042243606169637017427648782730262569867780740768147113920814883054772618895868488368503233232869519518179158464460942772640153600.000000, 
6479449017191976845284885233438089816275645517799666531122462921699683025830671700582471292904715695124539840006623495665475542481104908223177391979168382521687083369948432382069606287810245217627453907738840674699698004853610039266818536796570058008963195813757672646590660645806552624485934345844294905387103955542458338009186982296160765243701513669441451203268477493025378789555597712822122540668679029244183234805344644951663555100172900430280845293423918050968914319844528102377743450444067715266300545183226106379677851492981244926575133159499481020042866180968604943179348795515632261157153768924366196463385281100743383802549689929029584712014251588999648958525038815625612463203689950707239816109547920833228112245699993360599165364169699710381204091993943328996275370388347649792744804492769608407966381575691468019804649458755490352515104314037877155638653282162590011336350072818835455111849199881566861852187339442404350100265257192844605692092310815365281938337967228827864147384793409636744878827158437704876789888464675180473592530838339855120294515023888380338397093542856393262213429923309344998257625132320676127671576679845956819306194010900749579621077600120672095868980759955420932755813739466126616503895299414189337681880882094421980518249486563188328455886201077377715501586220873108819490358450189757308659188755760708843404237509002753041582734406696457917361015130255972944922145947304753924731682215836971712071343308086688750403275991573389990913748552992287021049764410658340282637811372792284515507794983999311853240549621953033910303743028822949651050403827865852328487473249652665450441403511636771519680335174685204157359702395343576511968114555883841285699068593776301254045829880568214472435726359108852003111166448055797793047117975060746078376370360591368113250262330503311346935116777042243606169637017427648782730262569867780740768147113920814883054772618895868488368503233232869519518179158464460942772640153600.000000, 6479449017191976845284885233438089816275645517799666531122462921699683025830671700582471292904715695124539840006623495665475542481104908223177391979168382521687083369948432382069606287810245217627453907738840674699698004853610039266818536796570058008963195813757672646590660645806552624485934345844294905387103955542458338009186982296160765243701513669441451203268477493025378789555597712822122540668679029244183234805344644951663555100172900430280845293423918050968914319844528102377743450444067715266300545183226106379677851492981244926575133159499481020042866180968604943179348795515632261157153768924366196463385281100743383802549689929029584712014251588999648958525038815625612463203689950707239816109547920833228112245699993360599165364169699710381204091993943328996275370388347649792744804492769608407966381575691468019804649458755490352515104314037877155638653282162590011336350072818835455111849199881566861852187339442404350100265257192844605692092310815365281938337967228827864147384793409636744878827158437704876789888464675180473592530838339855120294515023888380338397093542856393262213429923309344998257625132320676127671576679845956819306194010900749579621077600120672095868980759955420932755813739466126616503895299414189337681880882094421980518249486563188328455886201077377715501586220873108819490358450189757308659188755760708843404237509002753041582734406696457917361015130255972944922145947304753924731682215836971712071343308086688750403275991573389990913748552992287021049764410658340282637811372792284515507794983999311853240549621953033910303743028822949651050403827865852328487473249652665450441403511636771519680335174685204157359702395343576511968114555883841285699068593776301254045829880568214472435726359108852003111166448055797793047117975060746078376370360591368113250262330503311346935116777042243606169637017427648782730262569867780740768147113920814883054772618895868488368503233232869519518179158464460942772640153600.000000, 6479449017191976845284885233438089816275645517799666531122462921699683025830671700582471292904715695124539840006623495665475542481104908223177391979168382521687083369948432382069606287810245217627453907738840674699698004853610039266818536796570058008963195813757672646590660645806552624485934345844294905387103955542458338009186982296160765243701513669441451203268477493025378789555597712822122540668679029244183234805344644951663555100172900430280845293423918050968914319844528102377743450444067715266300545183226106379677851492981244926575133159499481020042866180968604943179348795515632261157153768924366196463385281100743383802549689929029584712014251588999648958525038815625612463203689950707239816109547920833228112245699993360599165364169699710381204091993943328996275370388347649792744804492769608407966381575691468019804649458755490352515104314037877155638653282162590011336350072818835455111849199881566861852187339442404350100265257192844605692092310815365281938337967228827864147384793409636744878827158437704876789888464675180473592530838339855120294515023888380338397093542856393262213429923309344998257625132320676127671576679845956819306194010900749579621077600120672095868980759955420932755813739466126616503895299414189337681880882094421980518249486563188328455886201077377715501586220873108819490358450189757308659188755760708843404237509002753041582734406696457917361015130255972944922145947304753924731682215836971712071343308086688750403275991573389990913748552992287021049764410658340282637811372792284515507794983999311853240549621953033910303743028822949651050403827865852328487473249652665450441403511636771519680335174685204157359702395343576511968114555883841285699068593776301254045829880568214472435726359108852003111166448055797793047117975060746078376370360591368113250262330503311346935116777042243606169637017427648782730262569867780740768147113920814883054772618895868488368503233232869519518179158464460942772640153600.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
125949778699170223958700868330802362644498167757805517861043843906655386393608952657509971526483249328006268930958321525697159843613810860690520348978460433947913291044736009472691699056484423747154724574769325247895737034100296302373899201469165912117005698942956119217940735979321067543644798953191068100382244283599965501045296770214585553021564051258493468591819355631485727281553786989108882596729120539722507487140216768856522463994718593252675250968712841774809921156252383898706294115210134530395619913749115239791334421562306922697711480325843375805071568927178993124774268511895060372525932228340013309854663443091477801643537356603020568506389033844292474295503672488195206768590193638911162276007464512000007381976822564741551454465141868972336117389513103152404795252149237731936279457813089471443447444265145742957329170149464747852794107936963602510358910617652794325139951960528713662558596949216933681628834436889754008644493027223854539576405990807461307064209205519506784715930801706537631673179811563223601493889346467905676393286580090109753587983383546344842270823133898796776990133600562351982475315101529327858531575362320278825010788291514275188907438394586812443539326408178973721057653280211898518809907284213386057118802893005018388410494596376661510329876136668911996651306744795827551947722142187663870323837220544594382339912947465861402496341675707887793460325434634205298605286153643520649215937098115173345827156431763855222809058248431412724844861386161655377022816831589426393082670540170740562285306287424685356800743921835599065302221899146324185346114422759503904776146041027295638813087962489494381867826918788989691559986165615995566761216614640650520218927342640190742984543967269544699538714531101281523929187312448499665253144386723082642206845738644544483171571497932865513722082729422302598894586781195305257547421791792334615787978717206758194934987888685048870034514410671471336258660193278738194359972802348813897593447768006550825660284793538760965670455153488079083839942514883760532931162958247491162156566192099206208782432492924384691837177831969408858767396038710730504827236862619633003593026779939001004318103180956963832836729256528791144918569289036572423535984972205609520126788459484159402649135080126550555181917686779970420604812467599092708355665388491226556275026479146552056976312047939410232259683806120183682095949398678060909866217628221652668231931901297737000118308457579545810709203213266661820674300023501074339739729719442364642665734217074096923161915304717330666903706782189853738619396829200691502866473144581931797278027868770947107118927155590494076941829121475599722042709464921732260247771618242239441709548530476578659911875330849600093134173584341781886181307866871268728298837297168612881422090885705931252996485274908842125876063244272392931147578726935710366617334758209828176749016189338293868094229756638851002317863308119797687440386114218587371781433214651368875143368035573861662771466277343528967278937670859694430260008525248071007465112622638205966362437455207423171170589520453325413566183678300483594047598734868341639016372093592927342264902837165607263769618288603837522428378298083766379332349687120473442254103276936640635266076086588934557393102026112284472978542418814681241315715616957937166562251420265956100536018524610409526285234079534643942582237947882433788038742332695719626261275220607431398208149268668639220728327029103446352406879678458655796257467140353582840729406085530943943728711574834213088524647400550134899819633377681275893233121150966373087979534931223490274024787563896047226491027278474245828534056160891087995607349582835468904957416116142424753528941851879019803561188033312007323371474034929529879429371372024794390146425624902197710693407779476385017662353942441921560687636817046160707604753412391662260954260256111993794765870159428352808805507167719751698316292912799851479040.000000, 125949778699170223958700868330802362644498167757805517861043843906655386393608952657509971526483249328006268930958321525697159843613810860690520348978460433947913291044736009472691699056484423747154724574769325247895737034100296302373899201469165912117005698942956119217940735979321067543644798953191068100382244283599965501045296770214585553021564051258493468591819355631485727281553786989108882596729120539722507487140216768856522463994718593252675250968712841774809921156252383898706294115210134530395619913749115239791334421562306922697711480325843375805071568927178993124774268511895060372525932228340013309854663443091477801643537356603020568506389033844292474295503672488195206768590193638911162276007464512000007381976822564741551454465141868972336117389513103152404795252149237731936279457813089471443447444265145742957329170149464747852794107936963602510358910617652794325139951960528713662558596949216933681628834436889754008644493027223854539576405990807461307064209205519506784715930801706537631673179811563223601493889346467905676393286580090109753587983383546344842270823133898796776990133600562351982475315101529327858531575362320278825010788291514275188907438394586812443539326408178973721057653280211898518809907284213386057118802893005018388410494596376661510329876136668911996651306744795827551947722142187663870323837220544594382339912947465861402496341675707887793460325434634205298605286153643520649215937098115173345827156431763855222809058248431412724844861386161655377022816831589426393082670540170740562285306287424685356800743921835599065302221899146324185346114422759503904776146041027295638813087962489494381867826918788989691559986165615995566761216614640650520218927342640190742984543967269544699538714531101281523929187312448499665253144386723082642206845738644544483171571497932865513722082729422302598894586781195305257547421791792334615787978717206758194934987888685048870034514410671471336258660193278738194359972802348813897593447768006550825660284793538760965670455153488079083839942514883760532931162958247491162156566192099206208782432492924384691837177831969408858767396038710730504827236862619633003593026779939001004318103180956963832836729256528791144918569289036572423535984972205609520126788459484159402649135080126550555181917686779970420604812467599092708355665388491226556275026479146552056976312047939410232259683806120183682095949398678060909866217628221652668231931901297737000118308457579545810709203213266661820674300023501074339739729719442364642665734217074096923161915304717330666903706782189853738619396829200691502866473144581931797278027868770947107118927155590494076941829121475599722042709464921732260247771618242239441709548530476578659911875330849600093134173584341781886181307866871268728298837297168612881422090885705931252996485274908842125876063244272392931147578726935710366617334758209828176749016189338293868094229756638851002317863308119797687440386114218587371781433214651368875143368035573861662771466277343528967278937670859694430260008525248071007465112622638205966362437455207423171170589520453325413566183678300483594047598734868341639016372093592927342264902837165607263769618288603837522428378298083766379332349687120473442254103276936640635266076086588934557393102026112284472978542418814681241315715616957937166562251420265956100536018524610409526285234079534643942582237947882433788038742332695719626261275220607431398208149268668639220728327029103446352406879678458655796257467140353582840729406085530943943728711574834213088524647400550134899819633377681275893233121150966373087979534931223490274024787563896047226491027278474245828534056160891087995607349582835468904957416116142424753528941851879019803561188033312007323371474034929529879429371372024794390146425624902197710693407779476385017662353942441921560687636817046160707604753412391662260954260256111993794765870159428352808805507167719751698316292912799851479040.000000, 125949778699170223958700868330802362644498167757805517861043843906655386393608952657509971526483249328006268930958321525697159843613810860690520348978460433947913291044736009472691699056484423747154724574769325247895737034100296302373899201469165912117005698942956119217940735979321067543644798953191068100382244283599965501045296770214585553021564051258493468591819355631485727281553786989108882596729120539722507487140216768856522463994718593252675250968712841774809921156252383898706294115210134530395619913749115239791334421562306922697711480325843375805071568927178993124774268511895060372525932228340013309854663443091477801643537356603020568506389033844292474295503672488195206768590193638911162276007464512000007381976822564741551454465141868972336117389513103152404795252149237731936279457813089471443447444265145742957329170149464747852794107936963602510358910617652794325139951960528713662558596949216933681628834436889754008644493027223854539576405990807461307064209205519506784715930801706537631673179811563223601493889346467905676393286580090109753587983383546344842270823133898796776990133600562351982475315101529327858531575362320278825010788291514275188907438394586812443539326408178973721057653280211898518809907284213386057118802893005018388410494596376661510329876136668911996651306744795827551947722142187663870323837220544594382339912947465861402496341675707887793460325434634205298605286153643520649215937098115173345827156431763855222809058248431412724844861386161655377022816831589426393082670540170740562285306287424685356800743921835599065302221899146324185346114422759503904776146041027295638813087962489494381867826918788989691559986165615995566761216614640650520218927342640190742984543967269544699538714531101281523929187312448499665253144386723082642206845738644544483171571497932865513722082729422302598894586781195305257547421791792334615787978717206758194934987888685048870034514410671471336258660193278738194359972802348813897593447768006550825660284793538760965670455153488079083839942514883760532931162958247491162156566192099206208782432492924384691837177831969408858767396038710730504827236862619633003593026779939001004318103180956963832836729256528791144918569289036572423535984972205609520126788459484159402649135080126550555181917686779970420604812467599092708355665388491226556275026479146552056976312047939410232259683806120183682095949398678060909866217628221652668231931901297737000118308457579545810709203213266661820674300023501074339739729719442364642665734217074096923161915304717330666903706782189853738619396829200691502866473144581931797278027868770947107118927155590494076941829121475599722042709464921732260247771618242239441709548530476578659911875330849600093134173584341781886181307866871268728298837297168612881422090885705931252996485274908842125876063244272392931147578726935710366617334758209828176749016189338293868094229756638851002317863308119797687440386114218587371781433214651368875143368035573861662771466277343528967278937670859694430260008525248071007465112622638205966362437455207423171170589520453325413566183678300483594047598734868341639016372093592927342264902837165607263769618288603837522428378298083766379332349687120473442254103276936640635266076086588934557393102026112284472978542418814681241315715616957937166562251420265956100536018524610409526285234079534643942582237947882433788038742332695719626261275220607431398208149268668639220728327029103446352406879678458655796257467140353582840729406085530943943728711574834213088524647400550134899819633377681275893233121150966373087979534931223490274024787563896047226491027278474245828534056160891087995607349582835468904957416116142424753528941851879019803561188033312007323371474034929529879429371372024794390146425624902197710693407779476385017662353942441921560687636817046160707604753412391662260954260256111993794765870159428352808805507167719751698316292912799851479040.000000, 
125949778699170223958700868330802362644498167757805517861043843906655386393608952657509971526483249328006268930958321525697159843613810860690520348978460433947913291044736009472691699056484423747154724574769325247895737034100296302373899201469165912117005698942956119217940735979321067543644798953191068100382244283599965501045296770214585553021564051258493468591819355631485727281553786989108882596729120539722507487140216768856522463994718593252675250968712841774809921156252383898706294115210134530395619913749115239791334421562306922697711480325843375805071568927178993124774268511895060372525932228340013309854663443091477801643537356603020568506389033844292474295503672488195206768590193638911162276007464512000007381976822564741551454465141868972336117389513103152404795252149237731936279457813089471443447444265145742957329170149464747852794107936963602510358910617652794325139951960528713662558596949216933681628834436889754008644493027223854539576405990807461307064209205519506784715930801706537631673179811563223601493889346467905676393286580090109753587983383546344842270823133898796776990133600562351982475315101529327858531575362320278825010788291514275188907438394586812443539326408178973721057653280211898518809907284213386057118802893005018388410494596376661510329876136668911996651306744795827551947722142187663870323837220544594382339912947465861402496341675707887793460325434634205298605286153643520649215937098115173345827156431763855222809058248431412724844861386161655377022816831589426393082670540170740562285306287424685356800743921835599065302221899146324185346114422759503904776146041027295638813087962489494381867826918788989691559986165615995566761216614640650520218927342640190742984543967269544699538714531101281523929187312448499665253144386723082642206845738644544483171571497932865513722082729422302598894586781195305257547421791792334615787978717206758194934987888685048870034514410671471336258660193278738194359972802348813897593447768006550825660284793538760965670455153488079083839942514883760532931162958247491162156566192099206208782432492924384691837177831969408858767396038710730504827236862619633003593026779939001004318103180956963832836729256528791144918569289036572423535984972205609520126788459484159402649135080126550555181917686779970420604812467599092708355665388491226556275026479146552056976312047939410232259683806120183682095949398678060909866217628221652668231931901297737000118308457579545810709203213266661820674300023501074339739729719442364642665734217074096923161915304717330666903706782189853738619396829200691502866473144581931797278027868770947107118927155590494076941829121475599722042709464921732260247771618242239441709548530476578659911875330849600093134173584341781886181307866871268728298837297168612881422090885705931252996485274908842125876063244272392931147578726935710366617334758209828176749016189338293868094229756638851002317863308119797687440386114218587371781433214651368875143368035573861662771466277343528967278937670859694430260008525248071007465112622638205966362437455207423171170589520453325413566183678300483594047598734868341639016372093592927342264902837165607263769618288603837522428378298083766379332349687120473442254103276936640635266076086588934557393102026112284472978542418814681241315715616957937166562251420265956100536018524610409526285234079534643942582237947882433788038742332695719626261275220607431398208149268668639220728327029103446352406879678458655796257467140353582840729406085530943943728711574834213088524647400550134899819633377681275893233121150966373087979534931223490274024787563896047226491027278474245828534056160891087995607349582835468904957416116142424753528941851879019803561188033312007323371474034929529879429371372024794390146425624902197710693407779476385017662353942441921560687636817046160707604753412391662260954260256111993794765870159428352808805507167719751698316292912799851479040.000000, 125949778699170223958700868330802362644498167757805517861043843906655386393608952657509971526483249328006268930958321525697159843613810860690520348978460433947913291044736009472691699056484423747154724574769325247895737034100296302373899201469165912117005698942956119217940735979321067543644798953191068100382244283599965501045296770214585553021564051258493468591819355631485727281553786989108882596729120539722507487140216768856522463994718593252675250968712841774809921156252383898706294115210134530395619913749115239791334421562306922697711480325843375805071568927178993124774268511895060372525932228340013309854663443091477801643537356603020568506389033844292474295503672488195206768590193638911162276007464512000007381976822564741551454465141868972336117389513103152404795252149237731936279457813089471443447444265145742957329170149464747852794107936963602510358910617652794325139951960528713662558596949216933681628834436889754008644493027223854539576405990807461307064209205519506784715930801706537631673179811563223601493889346467905676393286580090109753587983383546344842270823133898796776990133600562351982475315101529327858531575362320278825010788291514275188907438394586812443539326408178973721057653280211898518809907284213386057118802893005018388410494596376661510329876136668911996651306744795827551947722142187663870323837220544594382339912947465861402496341675707887793460325434634205298605286153643520649215937098115173345827156431763855222809058248431412724844861386161655377022816831589426393082670540170740562285306287424685356800743921835599065302221899146324185346114422759503904776146041027295638813087962489494381867826918788989691559986165615995566761216614640650520218927342640190742984543967269544699538714531101281523929187312448499665253144386723082642206845738644544483171571497932865513722082729422302598894586781195305257547421791792334615787978717206758194934987888685048870034514410671471336258660193278738194359972802348813897593447768006550825660284793538760965670455153488079083839942514883760532931162958247491162156566192099206208782432492924384691837177831969408858767396038710730504827236862619633003593026779939001004318103180956963832836729256528791144918569289036572423535984972205609520126788459484159402649135080126550555181917686779970420604812467599092708355665388491226556275026479146552056976312047939410232259683806120183682095949398678060909866217628221652668231931901297737000118308457579545810709203213266661820674300023501074339739729719442364642665734217074096923161915304717330666903706782189853738619396829200691502866473144581931797278027868770947107118927155590494076941829121475599722042709464921732260247771618242239441709548530476578659911875330849600093134173584341781886181307866871268728298837297168612881422090885705931252996485274908842125876063244272392931147578726935710366617334758209828176749016189338293868094229756638851002317863308119797687440386114218587371781433214651368875143368035573861662771466277343528967278937670859694430260008525248071007465112622638205966362437455207423171170589520453325413566183678300483594047598734868341639016372093592927342264902837165607263769618288603837522428378298083766379332349687120473442254103276936640635266076086588934557393102026112284472978542418814681241315715616957937166562251420265956100536018524610409526285234079534643942582237947882433788038742332695719626261275220607431398208149268668639220728327029103446352406879678458655796257467140353582840729406085530943943728711574834213088524647400550134899819633377681275893233121150966373087979534931223490274024787563896047226491027278474245828534056160891087995607349582835468904957416116142424753528941851879019803561188033312007323371474034929529879429371372024794390146425624902197710693407779476385017662353942441921560687636817046160707604753412391662260954260256111993794765870159428352808805507167719751698316292912799851479040.000000, 125949778699170223958700868330802362644498167757805517861043843906655386393608952657509971526483249328006268930958321525697159843613810860690520348978460433947913291044736009472691699056484423747154724574769325247895737034100296302373899201469165912117005698942956119217940735979321067543644798953191068100382244283599965501045296770214585553021564051258493468591819355631485727281553786989108882596729120539722507487140216768856522463994718593252675250968712841774809921156252383898706294115210134530395619913749115239791334421562306922697711480325843375805071568927178993124774268511895060372525932228340013309854663443091477801643537356603020568506389033844292474295503672488195206768590193638911162276007464512000007381976822564741551454465141868972336117389513103152404795252149237731936279457813089471443447444265145742957329170149464747852794107936963602510358910617652794325139951960528713662558596949216933681628834436889754008644493027223854539576405990807461307064209205519506784715930801706537631673179811563223601493889346467905676393286580090109753587983383546344842270823133898796776990133600562351982475315101529327858531575362320278825010788291514275188907438394586812443539326408178973721057653280211898518809907284213386057118802893005018388410494596376661510329876136668911996651306744795827551947722142187663870323837220544594382339912947465861402496341675707887793460325434634205298605286153643520649215937098115173345827156431763855222809058248431412724844861386161655377022816831589426393082670540170740562285306287424685356800743921835599065302221899146324185346114422759503904776146041027295638813087962489494381867826918788989691559986165615995566761216614640650520218927342640190742984543967269544699538714531101281523929187312448499665253144386723082642206845738644544483171571497932865513722082729422302598894586781195305257547421791792334615787978717206758194934987888685048870034514410671471336258660193278738194359972802348813897593447768006550825660284793538760965670455153488079083839942514883760532931162958247491162156566192099206208782432492924384691837177831969408858767396038710730504827236862619633003593026779939001004318103180956963832836729256528791144918569289036572423535984972205609520126788459484159402649135080126550555181917686779970420604812467599092708355665388491226556275026479146552056976312047939410232259683806120183682095949398678060909866217628221652668231931901297737000118308457579545810709203213266661820674300023501074339739729719442364642665734217074096923161915304717330666903706782189853738619396829200691502866473144581931797278027868770947107118927155590494076941829121475599722042709464921732260247771618242239441709548530476578659911875330849600093134173584341781886181307866871268728298837297168612881422090885705931252996485274908842125876063244272392931147578726935710366617334758209828176749016189338293868094229756638851002317863308119797687440386114218587371781433214651368875143368035573861662771466277343528967278937670859694430260008525248071007465112622638205966362437455207423171170589520453325413566183678300483594047598734868341639016372093592927342264902837165607263769618288603837522428378298083766379332349687120473442254103276936640635266076086588934557393102026112284472978542418814681241315715616957937166562251420265956100536018524610409526285234079534643942582237947882433788038742332695719626261275220607431398208149268668639220728327029103446352406879678458655796257467140353582840729406085530943943728711574834213088524647400550134899819633377681275893233121150966373087979534931223490274024787563896047226491027278474245828534056160891087995607349582835468904957416116142424753528941851879019803561188033312007323371474034929529879429371372024794390146425624902197710693407779476385017662353942441921560687636817046160707604753412391662260954260256111993794765870159428352808805507167719751698316292912799851479040.000000, 
125949778699170223958700868330802362644498167757805517861043843906655386393608952657509971526483249328006268930958321525697159843613810860690520348978460433947913291044736009472691699056484423747154724574769325247895737034100296302373899201469165912117005698942956119217940735979321067543644798953191068100382244283599965501045296770214585553021564051258493468591819355631485727281553786989108882596729120539722507487140216768856522463994718593252675250968712841774809921156252383898706294115210134530395619913749115239791334421562306922697711480325843375805071568927178993124774268511895060372525932228340013309854663443091477801643537356603020568506389033844292474295503672488195206768590193638911162276007464512000007381976822564741551454465141868972336117389513103152404795252149237731936279457813089471443447444265145742957329170149464747852794107936963602510358910617652794325139951960528713662558596949216933681628834436889754008644493027223854539576405990807461307064209205519506784715930801706537631673179811563223601493889346467905676393286580090109753587983383546344842270823133898796776990133600562351982475315101529327858531575362320278825010788291514275188907438394586812443539326408178973721057653280211898518809907284213386057118802893005018388410494596376661510329876136668911996651306744795827551947722142187663870323837220544594382339912947465861402496341675707887793460325434634205298605286153643520649215937098115173345827156431763855222809058248431412724844861386161655377022816831589426393082670540170740562285306287424685356800743921835599065302221899146324185346114422759503904776146041027295638813087962489494381867826918788989691559986165615995566761216614640650520218927342640190742984543967269544699538714531101281523929187312448499665253144386723082642206845738644544483171571497932865513722082729422302598894586781195305257547421791792334615787978717206758194934987888685048870034514410671471336258660193278738194359972802348813897593447768006550825660284793538760965670455153488079083839942514883760532931162958247491162156566192099206208782432492924384691837177831969408858767396038710730504827236862619633003593026779939001004318103180956963832836729256528791144918569289036572423535984972205609520126788459484159402649135080126550555181917686779970420604812467599092708355665388491226556275026479146552056976312047939410232259683806120183682095949398678060909866217628221652668231931901297737000118308457579545810709203213266661820674300023501074339739729719442364642665734217074096923161915304717330666903706782189853738619396829200691502866473144581931797278027868770947107118927155590494076941829121475599722042709464921732260247771618242239441709548530476578659911875330849600093134173584341781886181307866871268728298837297168612881422090885705931252996485274908842125876063244272392931147578726935710366617334758209828176749016189338293868094229756638851002317863308119797687440386114218587371781433214651368875143368035573861662771466277343528967278937670859694430260008525248071007465112622638205966362437455207423171170589520453325413566183678300483594047598734868341639016372093592927342264902837165607263769618288603837522428378298083766379332349687120473442254103276936640635266076086588934557393102026112284472978542418814681241315715616957937166562251420265956100536018524610409526285234079534643942582237947882433788038742332695719626261275220607431398208149268668639220728327029103446352406879678458655796257467140353582840729406085530943943728711574834213088524647400550134899819633377681275893233121150966373087979534931223490274024787563896047226491027278474245828534056160891087995607349582835468904957416116142424753528941851879019803561188033312007323371474034929529879429371372024794390146425624902197710693407779476385017662353942441921560687636817046160707604753412391662260954260256111993794765870159428352808805507167719751698316292912799851479040.000000, 125949778699170223958700868330802362644498167757805517861043843906655386393608952657509971526483249328006268930958321525697159843613810860690520348978460433947913291044736009472691699056484423747154724574769325247895737034100296302373899201469165912117005698942956119217940735979321067543644798953191068100382244283599965501045296770214585553021564051258493468591819355631485727281553786989108882596729120539722507487140216768856522463994718593252675250968712841774809921156252383898706294115210134530395619913749115239791334421562306922697711480325843375805071568927178993124774268511895060372525932228340013309854663443091477801643537356603020568506389033844292474295503672488195206768590193638911162276007464512000007381976822564741551454465141868972336117389513103152404795252149237731936279457813089471443447444265145742957329170149464747852794107936963602510358910617652794325139951960528713662558596949216933681628834436889754008644493027223854539576405990807461307064209205519506784715930801706537631673179811563223601493889346467905676393286580090109753587983383546344842270823133898796776990133600562351982475315101529327858531575362320278825010788291514275188907438394586812443539326408178973721057653280211898518809907284213386057118802893005018388410494596376661510329876136668911996651306744795827551947722142187663870323837220544594382339912947465861402496341675707887793460325434634205298605286153643520649215937098115173345827156431763855222809058248431412724844861386161655377022816831589426393082670540170740562285306287424685356800743921835599065302221899146324185346114422759503904776146041027295638813087962489494381867826918788989691559986165615995566761216614640650520218927342640190742984543967269544699538714531101281523929187312448499665253144386723082642206845738644544483171571497932865513722082729422302598894586781195305257547421791792334615787978717206758194934987888685048870034514410671471336258660193278738194359972802348813897593447768006550825660284793538760965670455153488079083839942514883760532931162958247491162156566192099206208782432492924384691837177831969408858767396038710730504827236862619633003593026779939001004318103180956963832836729256528791144918569289036572423535984972205609520126788459484159402649135080126550555181917686779970420604812467599092708355665388491226556275026479146552056976312047939410232259683806120183682095949398678060909866217628221652668231931901297737000118308457579545810709203213266661820674300023501074339739729719442364642665734217074096923161915304717330666903706782189853738619396829200691502866473144581931797278027868770947107118927155590494076941829121475599722042709464921732260247771618242239441709548530476578659911875330849600093134173584341781886181307866871268728298837297168612881422090885705931252996485274908842125876063244272392931147578726935710366617334758209828176749016189338293868094229756638851002317863308119797687440386114218587371781433214651368875143368035573861662771466277343528967278937670859694430260008525248071007465112622638205966362437455207423171170589520453325413566183678300483594047598734868341639016372093592927342264902837165607263769618288603837522428378298083766379332349687120473442254103276936640635266076086588934557393102026112284472978542418814681241315715616957937166562251420265956100536018524610409526285234079534643942582237947882433788038742332695719626261275220607431398208149268668639220728327029103446352406879678458655796257467140353582840729406085530943943728711574834213088524647400550134899819633377681275893233121150966373087979534931223490274024787563896047226491027278474245828534056160891087995607349582835468904957416116142424753528941851879019803561188033312007323371474034929529879429371372024794390146425624902197710693407779476385017662353942441921560687636817046160707604753412391662260954260256111993794765870159428352808805507167719751698316292912799851479040.000000, 125949778699170223958700868330802362644498167757805517861043843906655386393608952657509971526483249328006268930958321525697159843613810860690520348978460433947913291044736009472691699056484423747154724574769325247895737034100296302373899201469165912117005698942956119217940735979321067543644798953191068100382244283599965501045296770214585553021564051258493468591819355631485727281553786989108882596729120539722507487140216768856522463994718593252675250968712841774809921156252383898706294115210134530395619913749115239791334421562306922697711480325843375805071568927178993124774268511895060372525932228340013309854663443091477801643537356603020568506389033844292474295503672488195206768590193638911162276007464512000007381976822564741551454465141868972336117389513103152404795252149237731936279457813089471443447444265145742957329170149464747852794107936963602510358910617652794325139951960528713662558596949216933681628834436889754008644493027223854539576405990807461307064209205519506784715930801706537631673179811563223601493889346467905676393286580090109753587983383546344842270823133898796776990133600562351982475315101529327858531575362320278825010788291514275188907438394586812443539326408178973721057653280211898518809907284213386057118802893005018388410494596376661510329876136668911996651306744795827551947722142187663870323837220544594382339912947465861402496341675707887793460325434634205298605286153643520649215937098115173345827156431763855222809058248431412724844861386161655377022816831589426393082670540170740562285306287424685356800743921835599065302221899146324185346114422759503904776146041027295638813087962489494381867826918788989691559986165615995566761216614640650520218927342640190742984543967269544699538714531101281523929187312448499665253144386723082642206845738644544483171571497932865513722082729422302598894586781195305257547421791792334615787978717206758194934987888685048870034514410671471336258660193278738194359972802348813897593447768006550825660284793538760965670455153488079083839942514883760532931162958247491162156566192099206208782432492924384691837177831969408858767396038710730504827236862619633003593026779939001004318103180956963832836729256528791144918569289036572423535984972205609520126788459484159402649135080126550555181917686779970420604812467599092708355665388491226556275026479146552056976312047939410232259683806120183682095949398678060909866217628221652668231931901297737000118308457579545810709203213266661820674300023501074339739729719442364642665734217074096923161915304717330666903706782189853738619396829200691502866473144581931797278027868770947107118927155590494076941829121475599722042709464921732260247771618242239441709548530476578659911875330849600093134173584341781886181307866871268728298837297168612881422090885705931252996485274908842125876063244272392931147578726935710366617334758209828176749016189338293868094229756638851002317863308119797687440386114218587371781433214651368875143368035573861662771466277343528967278937670859694430260008525248071007465112622638205966362437455207423171170589520453325413566183678300483594047598734868341639016372093592927342264902837165607263769618288603837522428378298083766379332349687120473442254103276936640635266076086588934557393102026112284472978542418814681241315715616957937166562251420265956100536018524610409526285234079534643942582237947882433788038742332695719626261275220607431398208149268668639220728327029103446352406879678458655796257467140353582840729406085530943943728711574834213088524647400550134899819633377681275893233121150966373087979534931223490274024787563896047226491027278474245828534056160891087995607349582835468904957416116142424753528941851879019803561188033312007323371474034929529879429371372024794390146425624902197710693407779476385017662353942441921560687636817046160707604753412391662260954260256111993794765870159428352808805507167719751698316292912799851479040.000000, 
(clm1: 3 == row2: 3), (clm0: 3 == clm2: 3), (raw0: 3 == row1: 3)
condition true : calc production of mtx2d
mtx0 : mtx2d =
inf, inf, inf, 
inf, inf, inf, 
inf, inf, inf, 

```

`long double`でもあっという間に`inf`になる，非単位行列・非零行列の自乗とは恐ろしいものである




# 感想

+ 多次元方向の配列サイズの初期化が十分にできない`c`の構造体を使うなら，結局は1次元配列でやった方がメモリがスマートになるよな…？
    + どうせオレオレマトリックスの演算の実装は表からは見えないんだし，多少はコードが汚くても理解できればそれで十分かもしれないね
+ 構造体のメンバ変数に2次元配列の最大サイズを定義する時に，**あまりにも大きすぎるとスタックサイズの上限を超えてセグフォを吐く**
    + 要はオブジェクトを実体化させる前に構造体を呼び出した時点でセグフォが起きているので，これは**明らかに欠陥的な実装**である
    + 最大サイズより小さい設定で`()calloc()`しても問題がなかった理由にも密接に関わってくる，`struct`の仕様を理解しなければ…



## 参考

https://qiita.com/t-yama-3/items/e3304cc4dce2193f9300

https://tondol.hatenablog.jp/entry/20090713/1247426321

http://mitsunagistudio.net/old_posts/tips/variable_length/

↑
どうもこの記事の挙動と手元の挙動が違う
`[1][1]`で構造体を設定すると動かない
実装というか処理の場所が違うせいなの？

https://webkaru.net/clang/matrix-multiplication/

https://qiita.com/tyoshitake/items/83ce47f169c5b037f06c

↑
`c`の2次元配列のメモリはrow-major orderで設置されるらしいが，ここで`*((mtx2d*)calloc(1,size))`して得た`mtx2d`でメモリを確保して，そこに`mtx2d.mtx[100][100]`が入りきらない（`size`が小さい）場合は，あくまで`mtx2d.mtx[100][100]`の一部を使うんだろと（直感的には）思うけど，その場合はrow-major orderのせいで任意の形状の配列が必ず使えるとは限らないと（直感的には）思う
しかし今回の実装ではそういった問題は起きていない，確かに前回の自己参照構造体は他の構造体や自己参照ポインタのサイズが自動的に勘定されない問題があったが，今回は構造体の大きさの定義がちゃんとわかるため，十分なメモリサイズを手動で与えなくても勝手に定義に則って`long double[5][5]`を持ってくる可能性がある，もしそうなら`()callcoc()`の処理は不要だしメモリが無駄にデカくなっているかも…



## 補足

+ なんか「`c++`使えんじゃね？」みたいな話が来てるので，`c`の練習はもしかしたらこれでおしまいかも