아르키메데스는 96 각형을 직접 손으로 그려서 다각형의 둘레의 길이를 측정하였고, 원주율(π)이 3.14163이라고 계산하였다. 실제 값과 거의 차이가 나지 않았다. 1) 파이썬 내장 함수 이용 math 모듈을 import하면 원주율 내장함수 파이(pi)를 사용한다. math.pi로 불러서 계산식에 넣거나 출력 가능하다.
2) 아르키메데스의 수 삼각함수 식을 이용하여 반지름이 1인 원에 내접하는 변과 외접하는 변의 길이를 구한다. 두 변의 길이 차이가 일정 오차범위 이하로 작아질 때까지 n각형을 반복문으로 구현한다. n이 커질수록 원에 가까워지는 성질을 이용한다.
허용오차 10억분의 1에서는 3142 각형을 만들었을 때, 반복문의 연산을 마치게 된다. 허용오차를 다른 값으로 주면서 n값과 원주율의 변화를 살펴본다.
원주율이란?π = Pi = circumference / diameter = 3.14 구하는 방법이집트나 바빌로니아에서 최초의 원주율을 바퀴를 직접 굴려 구했다고 한다. 우리가 잘 아는 기원은, 기원 전 250년 경 아르키메데스가 원에 내접 / 외접하는 96각형과 닮은 삼각형의 공식을 이용, 이의 둘레가 원의 둘레와 비슷할 것이라는 가정 하에 약 "3.14163"정도로 구한 것이다. 그 뒤엔 공식을 통해 원주율을 구하는 아주 다양한 방법이 나왔다. 밑의 두 개 링크 참조. 누가 뭐래도 나는 나무위키가 좋다 - namu.wiki/w/%EC%9B%90%EC%A3%BC%EC%9C%A8/%EC%97%AD%EC%82%AC 수학 관련 블로그 - www.mathscareers.org.uk/calculating-pi/ Calculating Pi (π) - Maths Careers Pi is central to mathematics. Calculating pi can be achieved by different methods. Ancient and modern methods can be used to calculate PI www.mathscareers.org.uk 파이썬 구현1. math.pi 사용가장 쉬운 방법은 아무래도 Python의 math library에 있는 pi() function을 사용하는 것이겠다. math library docs.python.org/3/library/math.html math — Mathematical functions — Python 3.9.1rc1 documentation math — Mathematical functions This module provides access to the mathematical functions defined by the C standard. These functions cannot be used with complex numbers; use the functions of the same name from the cmath module if you require support for co docs.python.org
노트 ` 다만 math.pi로는 3.141592653589793 (소숫점 15자리) 까지만 나온다. ` Python float(실수)은 64비트 double-precision 베이스이고, base-2 fraction으로 1/2^n의 합으로 소숫점 자리들이 표시된다(*). ` 이에 해당하는 Significand precision / 부동 소숫점 / 유효숫자 비트는 53비트이기에(**), 2^(-53) = 1.10 x 10^(-16), 15 - 17자리까지만 소숫점이 표시되는 것이다. * www.geeksforgeeks.org/python-float-type-and-its-methods/ ** en.wikipedia.org/wiki/Double-precision_floating-point_format 따라서 더 많은 소수자리수를 표시하기 위해서는 다른 알고리즘을 써야할 것이다. 2. mpmath 라이브러리 사용검색하다가 찾게 되었다...! 소스코드 - stackoverflow.com/questions/9004789/1000-digits-of-pi-in-python mpmath는 mpf (Real Float) 라는 Python의 built-in float과 비슷한 숫자형태를 제공한다. mp라는 object로 정확도 / precision을 정하게 되는데, mp.prec으로는 binary precision을, mp.dps 로는 decimal (소숫점)one을 정할 수 있다. mpmath documentation 참고 - mpmath.org.doc/current/basics.html 3. pi 구현 다른 알고리즘 사용stackoverflow.com/questions/231767/what-does-the-yield-keyword-do 파이의 값은 다른 수학적 알고리즘으로도 구할 수 있다. 이 링크의 예시는 각 자릿수를 구하는 알고리즘을 통해, string list에 각 자릿수를 append하여 전체 파이값을 구한다. 그리고 결과값 (string list)를 출력! |