From e5b2c0129539979f139dde8a024d712a60474f14 Mon Sep 17 00:00:00 2001 From: AZEN-SGG Date: Wed, 21 May 2025 22:51:04 +0300 Subject: [PATCH] In trying to solve 3 --- 2025.05.02/03Ex/solve.c | 4 ++-- 2025.05.02/05Ex/main.c | 2 +- 2025.05.02/05Ex/solve.c | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/2025.05.02/03Ex/solve.c b/2025.05.02/03Ex/solve.c index b89c3b3..cb6a09f 100644 --- a/2025.05.02/03Ex/solve.c +++ b/2025.05.02/03Ex/solve.c @@ -40,7 +40,7 @@ int t3_solve ( for (it = 1; it <= m; ++it) { - c = a - ((b - a) / (y_b - y_a)) * y_a; + c = a - ((a - b) / (y_a - y_b)) * y_a; y = f(c); memcpy(&bits, &y, sizeof(bits)); @@ -57,7 +57,7 @@ int t3_solve ( b = c; y_b = y; } - } + } if (it > m) it = -1; diff --git a/2025.05.02/05Ex/main.c b/2025.05.02/05Ex/main.c index befd203..b2880a4 100644 --- a/2025.05.02/05Ex/main.c +++ b/2025.05.02/05Ex/main.c @@ -22,7 +22,7 @@ int main(int argc, char *argv[]) (a <= b) && (sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) && ((sscanf(argv[4], "%d", &m) == 1) && m > 0) && - ((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k <= len_f)))) + ((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k < len_f)))) ) { fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]); return -1; diff --git a/2025.05.02/05Ex/solve.c b/2025.05.02/05Ex/solve.c index 009f9f4..0370646 100644 --- a/2025.05.02/05Ex/solve.c +++ b/2025.05.02/05Ex/solve.c @@ -39,6 +39,13 @@ int t5_solve ( else if (is_equal(b, c)) return -1; + if ( + is_equal(y_a, y_b) || + is_equal(y_a, y_c) || + is_equal(y_b, y_c) + ) + return -3; + for (it = 1; it < m+1; ++it) { double *temp_pnt = 0, *inner_max_pnt; @@ -61,6 +68,14 @@ int t5_solve ( ) return -1; + if ( + is_equal(y_new, y_a) || + is_equal(y_new, y_c) || + is_equal(y_new, y_b) + ) + return -3; + + inner_max_pnt = fp_abs_max(&c, &b, &y_c, &y_b, &temp_pnt); *fp_abs_max(&a, inner_max_pnt, &y_a, temp_pnt, &temp_pnt) = x_new; *temp_pnt = y_new;