Monday, November 06, 2006
Java: 무한각형(무한히 많은 각이 있는 다각형) 내각 각도 계산; Infinite Polygon
프로그래밍 언어 중의 하나인 '자바'와 수학에 대한 게시물입니다.
▶▶ Java/자바/수학] 다각형 내각 각도 구하기; Regular Polygon Angle 게시물에 있는 방식으로, 정다각형의 내각의 각도를 계산하면, 각이 많은 다각형은 180도에 가까워집니다.
그런데 정확히* 180도가 되는 다각형은 무엇인지 궁금했습니다. 어지간히 큰 숫자로도 180도는 되지 않았습니다.
* 물론 계산상으로 그렇다는 얘기고, 실제로는 180도에 무한히 가까워질 뿐, 정말로 180도가 되지는 않겠지요.
18014398509481779
"일경팔천십사조삼천구백팔십오억구백사십팔만천칠백칠십구" 개의 각을 가진 정다각형부터는, 한 내각의 각도가 정확히 180도가 되었습니다. (물론 부동수소점 계산의 오차를 고려한다면 약간 다른 값이 될 수도 있을 것입니다.)
위의 숫자에서 1이 부족한
18014398509481778 각형의 각도는 179.99999999999997 도로 나옵니다.
파일명: Foo.java
마이너스 값을 가진 가상적인 다각형의 내각도 180도가 되는군요.
100000000000000000
이런 식으로 숫자를 직접 표현하면 int 정수로 인식하기에, integer number too large (int 값이 너무 큽니다) 라는 에러가 납니다.
이때는
100000000000000000d
이렇게 끝에 d 또는 D 를 붙이면, 그 숫자를 "double형 실수"로 간주하기에 에러가 나지 않습니다.
참고: ▶▶ Perl] 숫자 한글 발음으로 읽기, 한글 변환; Number To Korean; Spell Out
▶▶ Java/자바/수학] 다각형 내각 각도 구하기; Regular Polygon Angle 게시물에 있는 방식으로, 정다각형의 내각의 각도를 계산하면, 각이 많은 다각형은 180도에 가까워집니다.
그런데 정확히* 180도가 되는 다각형은 무엇인지 궁금했습니다. 어지간히 큰 숫자로도 180도는 되지 않았습니다.
* 물론 계산상으로 그렇다는 얘기고, 실제로는 180도에 무한히 가까워질 뿐, 정말로 180도가 되지는 않겠지요.
18014398509481779
"일경팔천십사조삼천구백팔십오억구백사십팔만천칠백칠십구" 개의 각을 가진 정다각형부터는, 한 내각의 각도가 정확히 180도가 되었습니다. (물론 부동수소점 계산의 오차를 고려한다면 약간 다른 값이 될 수도 있을 것입니다.)
위의 숫자에서 1이 부족한
18014398509481778 각형의 각도는 179.99999999999997 도로 나옵니다.
무한 다각형 내각 계산
파일명: Foo.java
class Foo {
public static void main(String args[]) {
// 정확히 180도가 되는 다각형
System.out.println(
((18014398509481779d - 2) * 180) / 18014398509481779d
);
// 출력 결과: 180.0
// 위에서 1이 부족한 숫자는
System.out.println(
((18014398509481778d - 2) * 180) / 18014398509481778d
);
// 출력 결과: 179.99999999999997
// 일경각형의 하나의 내각: 179.99999999999997
// 마이너스 일경각형 : 180.00000000000003
System.out.println(
((10000000000000000d - 2) * 180) / 10000000000000000d
);
// 십경각형의 하나의 내각: 180.0
// 마이너스 십경각형 : 180.0
System.out.println(
((100000000000000000d - 2) * 180) / 100000000000000000d
);
// 천無量大數각형의 하나의 내각: 180.0
// 마이너스 천無量大數각형 : 180.0
System.out.println(
((100000000000000000000000000000000000000000000000000000000000000000000000d - 2) * 180) /
100000000000000000000000000000000000000000000000000000000000000000000000d
);
}
}
public static void main(String args[]) {
// 정확히 180도가 되는 다각형
System.out.println(
((18014398509481779d - 2) * 180) / 18014398509481779d
);
// 출력 결과: 180.0
// 위에서 1이 부족한 숫자는
System.out.println(
((18014398509481778d - 2) * 180) / 18014398509481778d
);
// 출력 결과: 179.99999999999997
// 일경각형의 하나의 내각: 179.99999999999997
// 마이너스 일경각형 : 180.00000000000003
System.out.println(
((10000000000000000d - 2) * 180) / 10000000000000000d
);
// 십경각형의 하나의 내각: 180.0
// 마이너스 십경각형 : 180.0
System.out.println(
((100000000000000000d - 2) * 180) / 100000000000000000d
);
// 천無量大數각형의 하나의 내각: 180.0
// 마이너스 천無量大數각형 : 180.0
System.out.println(
((100000000000000000000000000000000000000000000000000000000000000000000000d - 2) * 180) /
100000000000000000000000000000000000000000000000000000000000000000000000d
);
}
}
마이너스 값을 가진 가상적인 다각형의 내각도 180도가 되는군요.
100000000000000000
이런 식으로 숫자를 직접 표현하면 int 정수로 인식하기에, integer number too large (int 값이 너무 큽니다) 라는 에러가 납니다.
이때는
100000000000000000d
이렇게 끝에 d 또는 D 를 붙이면, 그 숫자를 "double형 실수"로 간주하기에 에러가 나지 않습니다.
참고: ▶▶ Perl] 숫자 한글 발음으로 읽기, 한글 변환; Number To Korean; Spell Out
tag: java
자바 | Java
<< Home