Я новый программист на C, и я работаю над школьным проектом, где мне нужно приблизиться к значению или пи. Мой профессор заявил, что мы должны объявить все целочисленные термины, используя long double
. Консоль показывает, что я спрашиваю у пользователя, сколько терминов аппроксимирует значение pi, заданное функцией. Я ввожу 1 для количества терминов, но код возвращает -0.00000000 вместо 4.00000000.C - long double and printf issue
#include <stdio.h>
#include <math.h>
long double approx1(int terms)
{
long double pi = 0;
long double num = 4;
long double denom = 1;
int i;
for(i=1; i <= terms; i++)
{
if(i%2 != 0)
{
pi=pi+(num/denom);
}
else
{
pi=pi-(num/denom);
}
denom = denom + 2;
}
printf("%.8Lf\n", pi);
}
int main()
{
int terms;
long double pie;
printf("input number of terms, input 0 to cancel\n");
scanf("%d", &terms);
while(terms != 0)
{
if(terms > 0)
{
pie = approx1(terms);
printf("%.8Lf\n", pie);
printf("GG mate\n");
break;
}
else
{
printf("Incorrect input, please enter a correct input\n");
scanf("%d", &terms);
}
}
}
У меня не было никакого успеха в том, чтобы заставить его работать (он работает с поплавком). Что я делаю не так? (Я использую Code Blocks с включенным компилятором btw.)
«все целые термины с использованием' long double'' 'long double' не являются целыми. Что вы имеете в виду? – Olaf
Если ваш Code :: Blocks IDE использует компилятор MinGW GCC (который, как мне кажется, распространен), вы также можете столкнуться с этой проблемой: http://stackoverflow.com/a/7136886/12711 Я считаю, что более новые версии MinGW решает проблему, реализуя специальную поддержку 'printf()' вместо того, чтобы полагаться только на использование 'msvcrt.dll'. Поэтому вы можете попробовать более новую версию MinGW или MinGW-w64. –