@mr_firuzinho

Не могу найти ошибку в использовании long double в C?

Здравствуйте, подскажите пожалуйста, ниже код. Мне нужно получить "y" в long double. Я определил "y" как long double, в printf вывел через спецификатор %Lf. Но в итоге все равно какие-то совсем другие цифры получаются. (явное преобразование перед вычислениями тоже ставил - не сработывало!)
59fb632df1120990942023.png
#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <conio.h>
#include <windows.h>

int main(int argc, char const *argv[])
{
	system("chcp 1251");
	long double y = 0;
	double  x, h, c = 1, x1, x2, a, b;
	int k = 1, s = 1, f= 1;
	printf("Введите интервал [x1, x2] и точность: \n");
	while(f){
		while(scanf("%lf%lf%lf", &x1, &x2, &h) != 3){
			printf("Введите правильные значения!\n");
			fflush(stdin);
		}
		if((x1>=0 && x1<=1.0) && (x2 >= x1) && (x2>=0 && x2 <= 1.0)){
			f = 0;
		}
		else {
			printf("Введите правильные значения!\n");
			fflush(stdin);
		}	
	}
	printf("————————————————†——————————————\n"
	       "       X        |    Y      \n"
           "————————————————+—————————————\n");
	x = x1;
	a = x;
	b = x;
	while(x<=x2+h/2){
		y = y + a;
		k = k + 1;
		b = b * x * x;
		c = c*(2*k - 2) * (2 * k - 1) * (2*k - 1);
		s = s*(-1);
		a = s*b/c;
		x = x + h;
		printf("   %12f | %12Lf\n", x, y);
	}
	printf("——————————————————————————————\n");

	getch();
	return 0;
}

Спасибо!
  • Вопрос задан
  • 485 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Mercury13
Программист на «си с крестами» и не только
У меня всё сработало. Может, зависит от библиотеки Си? Какой компилятор?

UPD. Сработало на MinGW.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Но в итоге все равно какие-то совсем другие цифры получаются.

Т.е. вы знаете наверняка, что y имеет другое значение? Потому что, на мой взгляд, логика изменения y в цикле немного странная.
Ответ написан
Вы выводите x как float (%f), а он у вас double, double это %lf. Из-за этого второе число оказывается сдвинуто на 4 байта, т.е. выводится мусор.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы