[
[
1
2
3
4
]
[
5
6
7
8
]
[
9
10
11
12
]
[
13
14
15
16
]
]
×
[
[
17
18
19
20
]
[
21
22
23
23
]
[
25
26
27
28
]
[
29
30
31
32
]
]
=
[
[
342
356
518
540
]
[
398
412
606
628
]
[
1046
1092
1222
1276
]
[
1230
1276
1438
1492
]
]
{\displaystyle {\begin{bmatrix}{\begin{bmatrix}1&2\\3&4\end{bmatrix}}&{\begin{bmatrix}5&6\\7&8\end{bmatrix}}\\{\begin{bmatrix}9&10\\11&12\end{bmatrix}}&{\begin{bmatrix}13&14\\15&16\end{bmatrix}}\end{bmatrix}}\times {\begin{bmatrix}{\begin{bmatrix}17&18\\19&20\end{bmatrix}}&{\begin{bmatrix}21&22\\23&23\end{bmatrix}}\\{\begin{bmatrix}25&26\\27&28\end{bmatrix}}&{\begin{bmatrix}29&30\\31&32\end{bmatrix}}\end{bmatrix}}={\begin{bmatrix}{\begin{bmatrix}342&356\\518&540\end{bmatrix}}&{\begin{bmatrix}398&412\\606&628\end{bmatrix}}\\{\begin{bmatrix}1046&1092\\1222&1276\end{bmatrix}}&{\begin{bmatrix}1230&1276\\1438&1492\end{bmatrix}}\end{bmatrix}}}
Test lors du développement d'un langage de programmation permettant la surcharge des opérateurs, utilisée pour le produit de matrices.
Le produit de matrices de matrices permet de tester la récursivité et la gestion des variables locales à un contexte d'appel.
Calcul testé
[
[
1
2
3
4
]
[
5
6
7
8
]
[
9
10
11
12
]
[
13
14
15
16
]
]
×
[
[
17
18
19
20
]
[
21
22
23
23
]
[
25
26
27
28
]
[
29
30
31
32
]
]
{\displaystyle {\begin{bmatrix}{\begin{bmatrix}1&2\\3&4\end{bmatrix}}&{\begin{bmatrix}5&6\\7&8\end{bmatrix}}\\{\begin{bmatrix}9&10\\11&12\end{bmatrix}}&{\begin{bmatrix}13&14\\15&16\end{bmatrix}}\end{bmatrix}}\times {\begin{bmatrix}{\begin{bmatrix}17&18\\19&20\end{bmatrix}}&{\begin{bmatrix}21&22\\23&23\end{bmatrix}}\\{\begin{bmatrix}25&26\\27&28\end{bmatrix}}&{\begin{bmatrix}29&30\\31&32\end{bmatrix}}\end{bmatrix}}}
Résultat attendu
[
[
342
356
518
540
]
[
398
412
606
628
]
[
1046
1092
1222
1276
]
[
1230
1276
1438
1492
]
]
{\displaystyle {\begin{bmatrix}{\begin{bmatrix}342&356\\518&540\end{bmatrix}}&{\begin{bmatrix}398&412\\606&628\end{bmatrix}}\\{\begin{bmatrix}1046&1092\\1222&1276\end{bmatrix}}&{\begin{bmatrix}1230&1276\\1438&1492\end{bmatrix}}\end{bmatrix}}}
Résultat incorrect, contexte d'appel non géré, les variables locales sont écrasées par les appels récursifs.
[
[
342
356
518
540
]
[
379
394
409
424
]
[
576
628
680
732
]
[
596
652
706
760
]
]
{\displaystyle {\begin{bmatrix}{\begin{bmatrix}342&356\\518&540\end{bmatrix}}&{\begin{bmatrix}379&394\\409&424\end{bmatrix}}\\{\begin{bmatrix}576&628\\680&732\end{bmatrix}}&{\begin{bmatrix}596&652\\706&760\end{bmatrix}}\end{bmatrix}}}