c#을 사용하여 pi에서 n 수의 소수성을 계산하려고
해결책
숫자를 계산하기위한 고전적인 알고리즘 pi
Gauss-legendre 알고리즘입니다. 더 현대적인 알고리즘만큼 빠르지는 않지만 이해할 수 있다는 이점이 있습니다.
허락하다
a_0 = 1
b_0 = 1/Sqrt(2)
t_0 = 1/4
p_0 = 1
그 다음에
a_(n+1) = (a_n + b_n) / 2
b_(n+1) = Sqrt(a_n * b_n)
t_(n+1) = t_n - p_n * (a_n - a_(n+1))^2
p_(n+1) = 2 * p_n
그 다음에
pi =. (a_n + b_n)^2 / (4 * t_n)
여기 (=.
이 알고리즘은 "대략 동일"을 의미합니다.이 알고리즘은 2 차 수렴을 나타냅니다 (정확한 소수점 자리의 수는 각 반복마다 두 배로).
임의의 차량 산술 라이브러리를 발견하는 것을 포함하여 이것을 C#로 번역하기 위해 당신에게 맡길 것입니다.
다른 팁
당신이 말하는 주제 Taylor 시리즈를 사용하여 PI의 값을 계산하십시오. "Double F (int I)"기능을 사용하여 해당 주제에 쓴 기능을 사용하면 "I"용어 이후 PI의 값이 제공됩니다.
Pi를 계산하는이 방법은 속도가 느립니다. PI 빠른 알고리즘.
하나의 구현을 찾을 수도 있습니다 여기 그것은 pi를 nth 숫자로 계산합니다.
행운을 빕니다!
이 좋은 가이드를 자세히 살펴보면 :
병렬 프로그래밍 패턴 : .NET 프레임 워크를 사용하여 병렬 패턴 이해 및 적용 4
70 페이지에서 찾을 수 있습니다.이 귀여운 구현 (내 측면에서 약간의 변화가 있음) :
static decimal ParallelPartitionerPi(int steps)
{
decimal sum = 0.0;
decimal step = 1.0 / (decimal)steps;
object obj = new object();
Parallel.ForEach(Partitioner.Create(0, steps),
() => 0.0,
(range, state, partial) =>
{
for (int i = range.Item1; i < range.Item2; i++)
{
decimal x = (i + 0.5) * step;
partial += 4.0 / (1.0 + x * x);
}
return partial;
},
partial => { lock (obj) sum += partial; });
return step * sum;
}
제휴하지 않습니다 StackOverflow