From da8dc2a9eff4bcb051297eccbd8ff50a94de16a6 Mon Sep 17 00:00:00 2001 From: hallerni98888 Date: Tue, 11 Nov 2025 15:34:34 +0100 Subject: [PATCH] matrixAdd check --- matrix.c | 38 ++++++++++++++++++++++++++++++++++---- runMatrixTests | Bin 63496 -> 64200 bytes 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/matrix.c b/matrix.c index 7512d1d..999f713 100644 --- a/matrix.c +++ b/matrix.c @@ -73,14 +73,44 @@ Matrix add(const Matrix matrix1, const Matrix matrix2) return result; } - // Matritzenaddition - for (unsigned int i = 0; i < result.rows; i++) + if (matrix1.cols == 1 && matrix1.rows == matrix2.rows) // Broadcasting { - for (unsigned int j = 0; j < result.cols; j++) + + for (unsigned int i = 0; i < matrix1.rows; i++) { - result.buffer[i * result.cols + j] = matrix1.buffer[i * matrix1.cols + j] + matrix2.buffer[i * matrix2.cols + j]; + for (unsigned int j = 0; j < result.cols; j++) + { + result.buffer[i * result.cols + j] = matrix1.buffer[i] + matrix2.buffer[i * matrix2.cols + j]; + } + } + + + } + + else if (matrix2.cols == 1 && matrix1.rows == matrix2.rows) + { + for (unsigned int i = 0; i < matrix2.rows; i++) + { + for (unsigned int j = 0; j < result.cols; j++) + { + result.buffer[i * result.cols + j] = matrix1.buffer[i * matrix1.cols + j] + matrix2.buffer[i]; + } } } + + else + { + // Elementweise Addition + for (unsigned int i = 0; i < result.rows; i++) + { + for (unsigned int j = 0; j < result.cols; j++) + { + result.buffer[i * result.cols + j] = matrix1.buffer[i * matrix1.cols + j] + matrix2.buffer[i * matrix2.cols + j]; + } + } + } + + return result; } diff --git a/runMatrixTests b/runMatrixTests index 4f7fb50429e62ae705d19f36c92bcd2f90026e7b..d05b8a814fe2d96b0fb9a7ae7a4b23fbbcf2e993 100755 GIT binary patch delta 23613 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 delta 20500 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 C9jTB2