나는 아래의 코드를 사용하여 가능한 한 많은 정밀도 숫자를 얻기 위해 시리즈 표현을 사용하여 전자를 근사하려고 노력해 왔지만 계산 한 단어의 수와 상관없이 정밀도 숫자 동일하게 유지되는 것 같습니다. 예 :대략적인 e - 가능한 한 많은 정밀도 숫자 얻기
2.71828198432922363281250000000000000000000000000000
그것은 잘못 내 접근 방식인가? 다음은 코드입니다 :
1 #include <stdio.h>
2 #include <iostream>
3 #include <math.h>
4 using namespace std;
5
6 float factorial (float a)
7 {
8 if (a > 1)
9 {
10 return (a * factorial (a-1));
11 } else
12 {
13 return 1;
14 }
15 }
16
17 int main()
18 {
19 float sum = 0;
20 int range=100000;
21
22 for (int i=0; i<=range;i++)
23 {
24 sum += pow(-1,i)/factorial(i);
25 }
26 sum = pow(sum,-1);
27 printf("%4.50f\n", sum);
28 }
: 당신이 얻을 여기
는 결과입니다 8 번째 자리에 오류가 있습니다. 'float' 대신'long double'을 사용해보십시오. 결과가 다소 좋아 졌는지 확인하십시오. – dasblinkenlight
google for "모든 컴퓨터 과학자가 부동 소수점 연산에 대해 알아야하는 것". 조건이 충분히 작아지면 더 이상 합계에 영향을주지 않습니다. –
@gspr : printf 앞에있는 마지막 줄을 기록하십시오. 물론'pow()'는 매우 느린 방법입니다. –