1. 자바 삼각함수
Math이전에 반올림 숫자를 공부했을 때 클래스와 그 방법 중 일부에 대해 알게 되었습니다 . 이제 이 클래스에 대해 자세히 살펴보겠습니다.
이름에서 알 수 있듯이 이 Math클래스에는 프로그래머가 가장 자주 사용하는 수학 연산에 대한 메서드가 포함되어 있습니다. 다음은 가장 흥미로운 것입니다.
| 방법 | 설명 | |
|---|---|---|
|
각도의 사인을 d라디안으로 반환합니다. |
|
|
각도의 코사인 값을 d라디안으로 반환합니다. |
|
|
각도의 탄젠트를 d라디안으로 반환합니다. |
|
|
아크사인을 반환합니다. | |
|
아크코사인을 반환합니다. | |
|
아크탄젠트를 반환합니다. | |
|
하이퍼볼릭 사인을 반환합니다. | |
|
하이퍼볼릭 코사인을 반환합니다. | |
|
하이퍼볼릭 탄젠트를 반환합니다. | |
, 및 메서드는 라디안 으로 표시되는 각도를 취합니다. 각도를 도에서 라디안으로 또는 그 반대로 변환하기 위해 이 클래스는 두 가지 특수 메서드를 제공합니다.Math.sin()Math.cos()Math.tan()Math
| 방법 | 설명 |
|---|---|
|
각도를 도에서 라디안으로 변환 |
|
각도를 라디안에서 도로 변환합니다. |
그런데 클래스에는 메서드 외에도 두 개의 상수 변수 (클래스의 정적 필드) Math가 있습니다 .
| 끊임없는 | 설명 |
|---|---|
|
"Pi" 상수는 다음과 같습니다.3.141592653589793 |
|
"E" 상수는 다음과 같습니다.2.718281828459045 |
이 모든 기능은 자신만의 게임을 작성하거나, 그래픽 작업을 하거나, 단순히 지도에서 경로의 길이를 계산하기로 결정한 경우 매우 유용할 수 있습니다.
예를 들어 를 계산하려면 sin(45°)다음과 같이 하십시오.
Math.sin( Math.toRadians(45) )
예를 들면 다음과 같습니다.
public class Main
{
public static int N = 10;
public static void drawValue(double y)
{
int value = (int) (y * N) + N;
for (int i = 0; i < 2 * N; i++)
{
char c = i == N ? '|': '.';
if (i == value)
c = '*';
System.out.print(c);
}
System.out.println();
}
public static void main(String[] args)
{
for (int i = 0; i < 10 * N; i++)
{
double x = i * 1.0 / N;
double y = Math.sin(x);
drawValue(y);
}
}
}
2. Java의 대수 함수
대부분의 경우 고등학교 수학은 프로그래머에게 충분합니다. 사인과 코사인조차도 코드에서 거의 발견되지 않습니다. 대부분 게임, 지도 또는 게임 엔진으로 작업할 때 필요합니다. 프로그래머의 90%는 이런 일을 겪지 않습니다.
그러나 기하학 외에도 프로그래머는 때때로 대수 함수를 사용해야 합니다. 물론 Math클래스에는 가장 일반적인 클래스가 포함되어 있습니다.
| 방법 | 설명 |
|---|---|
|
의 제곱근a |
|
의 세제곱근a |
|
지수:ab |
|
지수(오일러 수의 거듭제곱):ea |
|
다음의 자연 로그 a:ln(a) |
|
밑이 10인 로그 a:log10(a) |
|
다음의 자연 로그 x + 1:ln(x + 1) |
|
ex-1 |
숫자의 제곱근 또는 세제곱근을 원하는 경우 sqrt(a)및 cbrt(a)방법을 사용할 수 있습니다.
제곱근은 다음과 같이 계산할 수 있습니다.
Math.sqrt(2)
더 높은 거듭제곱의 근을 얻으려면 거듭제곱 방법을 사용 a하십시오 ¼.
Math.pow(2, 0.25)
log(a)로그 및 지수의 경우 (자연 로그) 및 exp(x)(지수) 방법이 있습니다 . 밑이 10인 로그를 계산하려면 log10(a).
숫자의 로그를 b밑으로 하려면 a다음 간단한 공식을 사용하십시오.loga(b) = ln(b) / ln(a)
유용한 방법
의 매우 작은 값을 포함하는 계산을 수행하는 경우 x마지막 두 함수 — log1p()and expm1()—가 유용할 수 있습니다.
매우 작은 변수와 매우 큰 변수를 추가할 때 double매우 작은 값이 중요하지 않은 것으로 간주되어 무시(버려짐)되는 경우가 종종 있습니다. 사실 이것은 log()and exp()메소드를 사용하는 경우에 발생합니다. 이를 해결하기 위해 프로그래머들은 "작고 중요한 부분"만 반환하는 함수를 고안했습니다.
예:
의 자연 로그를 계산한다고 가정합니다 1 + x. 여기서 는 x입니다 . 와 를 더하면 을 얻게 되므로 단순히 이 숫자를 메서드에 전달할 수 없습니다 . 숫자가 더해지면 완전히 버려질 정도로 작은 숫자입니다.10-20log()110-20110-20
log()수학은 종종 에 가까운 숫자의 계산을 포함하기 때문에 1프로그래머는 이 문제를 해결하는 방법을 생각해 냈습니다. 숫자 자체를 메서드에 전달하는 대신 에서 차이만 전달하는 것입니다 1.
3. 최소 및 최대
두 가지 더 유용한 기능은 min(a, b)및 입니다 max(a, b). 이미 짐작하셨겠지만 첫 번째는 두 숫자 중 최소값을 반환합니다.
Math.min(a, b)
두 번째는 최대 두 숫자를 반환합니다.
Math.max(a, b)
if항상 쓰거나 삼항 연산자를 사용할 수 있는데 왜 이러한 함수가 필요한가요 (a < b ? a: b)?
코드의 가독성에 관한 것입니다. 때로는 코드가 문으로 오버로드되어 if더 간결한 표기법을 사용하고자 할 수 있습니다. 비교해보자:
| 암호 | 설명 |
|---|---|
|
문 사용 if-else(가장 긴 작성 방법) |
|
삼항 연산자 사용 단점: - 부피가 큰 코드 - 계산이 두 번 수행됨 |
|
이것은 쓰기 좋은 방법이지만 약간 중복됩니다. |
|
바로 🙂 |
4. 여러 숫자의 최소값과 최대값
min()and 메서드를 사용하는 또 다른 좋은 방법이 있습니다 max().
여러 숫자나 변수의 최소값(또는 최대값)을 계산합니다. 이러한 메서드를 중첩 호출하는 것이 매우 편리합니다.
최소 3개의 숫자를 찾는 방법은 다음과 같습니다.
Math.min(a, Math.min(b, c))
그래서 뭐? 매우 편리합니다. 두 숫자의 최소값을 계산한 다음 이 숫자의 최소값과 세 번째 숫자를 반환합니다.
최소 4개의 숫자는 같은 방식으로 얻습니다.
Math.min(a, Math.min(b, Math.min(с, d)))
즉, 이 공식을 좀 더 명확하게 작성할 수 있습니다.
Math.min(Math.min(a, b), Math.min(c, d))
방법 에 대해 모두 동일하게 작동합니다 max().
if-else연산자 또는 삼항 연산자를 사용하면 이러한 코드 스니펫이 조금 더 복잡해집니다. 그러나 min()및 max()방법을 사용하는 것은 완벽합니다.
GO TO FULL VERSION