Untitled
#include <stdio.h> #include <math.h> double versiera(double x) { // Верзьера Аньези: y = 1 / (1 + x^2) return 1.0 / (1.0 + x * x); } double lemniscate(double x) { // Лемниската Бернулли (для y > 0): r^2 = 2 * a^2 * cos(2 * theta), a = 1, x = sqrt(r^2) * cos(theta) if (fabs(x) < 1e-7) return -1; // Приблизительное сравнение с 0 для избежания деления на 0 double r2 = 2 * cos(2 * atan(x)); if (r2 <= 0) return -1; // Функция не определена для отрицательных значений r^2 double y = sqrt(r2 / (1 + x * x)); return isnan(y) ? -1 : y; } double hyperbola(double x) { // Квадратичная гипербола: y = 1 / x if (fabs(x) < 1e-7) return -1; // Приблизительное сравнение с 0 для избежания деления на 0 double y = 1.0 / x; return isnan(y) ? -1 : y; } int main() { double x, dx = 2 * M_PI / 41; // Шаг для 42 замеров for (int i = 0; i <= 41; i++) { x = -M_PI + i * dx; double y1 = versiera(x); double y2 = lemniscate(x); double y3 = hyperbola(x); printf("%.7f | ", x); if (isnan(y1) || y1 < 0) { printf("- | "); } else { printf("%.7f | ", y1); } if (isnan(y2) || y2 < 0) { printf("- | "); } else { printf("%.7f | ", y2); } if (isnan(y3) || y3 < 0) { printf("-\n"); } else { printf("%.7f\n", y3); } } return 0; }
Leave a Comment