これの続き
https://qiita.com/Soluna_Eureka/items/8ff36a03c0bdf7d91de3
概要
- 前回に続き配列の勉強を始めた
char
の配列は扱わない
- オブジェクト指向なオレオレマトリックスを実装した
- 具体的にはオレオレ構造体に2次元配列をぶち込んだ
- メモリ(配置と総量)がガバ
- 1次元配列の方が良いんじゃ(感想に後述する)
- ついでに行列積を実装した
- 計算量がガバ($O(n)=3$)
- その他の要素はだいたい前回と同じだと思って良いよ
設計方針
- 前回の反省からオレオレオブジェクト専用オレオレ関数は引数をアドレス渡しで実装することにした
以下,出来上がったもの
#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 delmtx2d(mtx2d *adr); void expmtx2d(mtx2d *adr); void prdmtx2d(mtx2d *adr0, mtx2d *adr1, mtx2d *adr2); #endif
#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 delmtx2d(mtx2d *adr){ free(adr); }; 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"); } };
#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()
では以下を意図しているぜ
コンパイル,実行
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)
% 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
の練習はもしかしたらこれでおしまいかも