Как долго долго печатать
Я делаю программу, которая aproximate PI, и я пытаюсь использовать долгое время, но она не работает.
Вот код
#include<stdio.h>
#include<math.h>
typedef long long num;
main(){
num pi;
pi=0;
num e, n;
scanf("%d", &n);
for(e=0; 1;e++){
pi += ((pow((-1.0),e))/(2.0*e+1.0));
if(e%n==0)
printf("%15lld -> %1.16lld\n",e, 4*pi);
//printf("%lld\n",4*pi);
}
}
Ответы
Ответ 1
%lld
является стандартным способом C99, но это не работает на компиляторе, который я использую (mingw32-gcc v4.6.0). Способ сделать это в этом компиляторе: %I64d
Итак, попробуйте следующее:
if(e%n==0)printf("%15I64d -> %1.16I64d\n",e, 4*pi);
и
scanf("%I64d", &n);
Единственный способ, которым я знаю это, полностью переносимым образом - использовать определения в <inttypes.h>
.
В вашем случае это будет выглядеть так:
scanf("%"SCNd64"", &n);
//...
if(e%n==0)printf("%15"PRId64" -> %1.16"PRId64"\n",e, 4*pi);
Это действительно очень уродливо... но, по крайней мере, оно переносимо.
Ответ 2
Я думаю, что весь алгоритм сомнительный при написании с использованием long long
; тип данных, вероятно, должен быть больше похож на long double
(с %Lf
для формата scanf()
и, возможно, %19.16Lf
для форматов printf()
.
Ответ 3
double pi = 2 * acos(0.0);
int n;
scanf("%d",&n); //precision with which you want the value of pi
printf("%.*lf\n",n,pi);
Ответ 4
Прежде всего,% d для a int
Итак, %1.16lld
не имеет смысла, потому что% d является целым числом
Этот typedef, который вы делаете, также не нужен, используйте тип прямо вперед, делает гораздо более читаемый код.
То, что вы хотите использовать, это тип double
, для вычисления pi
и затем используя %f
или %1.16f
.