Как работать с числами типа long double - C (СИ)
Формулировка задачи:
Возникает проблема при использовании типа long double при написании программы на Си. Ответом на каждую задачу являются просто нули. Например:
Ответ: 0.0000000000000000000000000
Такой же ответ выдается, хотя бы если вычислять сумму двух чисел.
Мне советовали в самом начале написания программы добавить #define __USE_MINGW_ANSI_STDIO 1, но это не помогло.
#include <stdio.h>
#include <conio.h>
int main(void)
{
long double p, t;
long int i, x;
scanf("%ld", &x);
p = 0;
for(i = 1; i<=x; ++i) p = p + 1/i;
printf("%1.25Lf", p);
getch();
return 0;
}Нужно использовать именно тип long double.
Однако, при использовании типа float, программа тоже работает неправильно. Например, если в приведенной мной программе поменять тип long double на float, то ответ будет равен 1.0000000000000000000000000, то есть похоже дробная часть при вычислении просто отбрасывается. Есть какие-нибудь предложения по устранению данной проблемы? Процессор 32-ух разрядный, операционная система Windows XP SP3. Использую компилятор MinGW, среда программирования Dev-C++.Решение задачи: «Как работать с числами типа long double»
textual
Листинг программы
printf("%1.25lf", (double)p);
Объяснение кода листинга программы
В данном коде на языке C выводится значение переменной типа long double, приведенное к типу double, с точностью до 25 знаков после запятой. Список элементов кода:
%1.25lf- форматная строка для функции printf, которая указывает, что необходимо вывести значение переменной типа long double с точностью до 25 знаков после запятой.(double)p- приведение значения переменной типа long double к типу double.p- переменная типа long double, значение которой будет выведено на экран.