advent-of-dreamcast/linear_algebra.c
2024-12-13 23:58:42 -06:00

57 lines
1.1 KiB
C

#include "linear_algebra.h"
#include "printf.h"
//#include <stdio.h>
double determinant_2x2(double a, double b,
double c, double d)
{
/*
a b
c d
*/
return a * d - b * c;
}
/*
5550.00 450000000444000.00 600000000222000.00
81081081161.08 108108108148.11
-3876.00 -460000000548084.00 -400000000524792.00
118679050709.00 103199174542.00
-6595.00 -470000000250610.00 -690000000567170.00
71266110727.92 104624715779.71
4278.00 440000001045978.00 460000000280508.00
102851800151.00 107526881786.00
*/
union di {
double d;
int64_t i;
};
static int64_t raw_double(double n)
{
union di di;
di.d = n;
return di.i;
}
struct double2 cramers_rule_2x2(double a1, double b1, double c1,
double a2, double b2, double c2)
{
double denom = determinant_2x2(a1, b1,
a2, b2);
double x_numer = determinant_2x2(c1, b1,
c2, b2);
double y_numer = determinant_2x2(a1, c1,
a2, c2);
return (struct double2){x_numer / denom, y_numer / denom};
}