<기본코드>
public class Chap_06 {
public static void main(String[] args) {
// 1. 제곱, 제곱근, 지수
System.out.println("== 제곱 ==");
System.out.println(Math.pow(2,3));
// Math.pow(밑,몇 제곱)
System.out.println(Math.pow(2, -3));
System.out.println(Math.pow(-2, -3));
// -제곱의 경우 1/2의 3승 = 1/8
System.out.println(Math.pow(2,30));
System.out.printf("%.0f\n" , Math.pow(2,30));
System.out.println("== 제곱근 ==");
System.out.println(Math.sqrt(16));
//Math.sqrt() = 제곱근
System.out.println(Math.pow(16, 1.0/2));
// -> 16을 1/2(16의 1/2승)
System.out.println(Math.pow(16, 1.0/4));
// 참고) 절대 값 (Math.abs())
System.out.println("== 절대 값 ==");
System.out.println(Math.abs(5));
System.out.println(Math.abs(-5));
// 2. 로그 (자연상수와 밑이 10인 로그를 지원)
System.out.println("== 로그 ==");
System.out.println(Math.E);
System.out.println(Math.log(2.718281828459045)); // 1
System.out.println(Math.log10(1000));
System.out.println(Math.log(4)/ Math.log(2));
}
}
<연습문제>
// Practice
// 제곱과 제곱근을 Math 없이 구현하기
public class Practice_07 {
static double pow(int x, double y){ //반환은 double, 밑은 int, 지수는 double
double result = 1;
boolean isMinus = false;
if (y == 0){
return 1;
//음수인 경우
} else if (y < 0) {
y *= -1;
isMinus = true;
}
for (int i = 0; i < y; i++) {
result *= x; // 반복해서 곱해주면, y제곱 만큼 곱해주면 된다.
}
//return result;
return isMinus ? 1 / result : result; //음수면 나눠서 리턴 아니면 그냥 리턴
}
static double sqrt (int a){ //바빌로니아 방법, 뉴튼 방법
/*
바빌로니아 방법
어떤수 N에 대해서 제곱근을 구한다고 하면
루트 N = Xn + E(입실론 - 가장 작은 수)
N = N의 제곱근에 루트 = (Xn + E) 제곱
Xn의 제곱 + 2XnE + E의 제곱 (입실론의 제곱은 엄청 작은 수라 생략)
N = Xn의 제곱에 + 2XnE
=입실론 = (N - Xn의 제곱) / 2XnE
=Xn + ((N -Xn의 제곱)/2Xn))
=Xn + N/2Xn - Xn/2
=Xn/2 + N/2Xn
=1/2(Xn + N/Xn)
Xn+1 = 1/2(Xn + N/Xn)
*/
double result = 1;
for (int i = 0; i < 10; i++) {
result = (result + (a/result)) / 2;
}
return result;
}
public static void main(String[] args) {
// Test code
System.out.println("== Math pow ==");
System.out.println(Math.pow(2, 3));
System.out.println(Math.pow(2, -3));
System.out.println(Math.pow(-2, -3));
System.out.println("== My pow ==");
System.out.println(pow(2, 3));
System.out.println(pow(2, -3));
System.out.println(pow(-2, -3));
System.out.println("== Math sqrt ==");
System.out.println(Math.sqrt(16));
System.out.println(Math.sqrt(8));
System.out.println("== My sqrt ==");
System.out.println(sqrt(16));
System.out.println(sqrt(8));
}
}
for (int i = 0; i < 10; i++) {
result = (result + (a/result)) / 2;
}
아직 이부분은 쪼금 더 복습이 필요 할 것 같다 ㅜ