programing

왜 Math.floor는 더블을 반환합니까?

sourcejob 2022. 11. 3. 21:51
반응형

왜 Math.floor는 더블을 반환합니까?

공식 자바독은 다음과 같이 말한다.Math.floor()를 반환하다double'로 변환'인데 ' 정수'를 돌려주지 죠?int

동일한 Javadoc에 따르면:

가 " " 인 NaN또는 무한대, 양수 0 또는 음수 0을 지정하면 인수와 결과가 같습니다.건 안 돼요.int.

큰 ★★★double 큰 값보다 .int에 a, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴlong.

정확성을 위해서야.이중 데이터 유형은 53비트 가수입니다.다른 것들 중에서, 이것은 2배수가 정밀도 손실 없이 최대 2^53의 전체를 나타낼 수 있다는 것을 의미한다.

이렇게 많은 숫자를 정수에 저장하면 오버플로가 발생합니다.정수는 32비트밖에 없습니다.

정수를 2배로 되돌리는 것이 올바른 방법입니다.정수가 할 수 있는 것보다 훨씬 넓은 사용 가능한 숫자 범위를 제공하기 때문입니다.

다른 사람들이 그 이유를 알려줬는데, 이 작업을 하고 싶다면 제가 올바른 반올림 방법을 알려드리겠습니다.양수만 사용하는 경우 다음 문을 사용할 수 있습니다.

int a=(int) 1.5;

단, (int)는 항상 0을 향해 반올림합니다.따라서 음수를 구하려면 다음과 같이 하십시오.

int a=(int) -1.5; //Equal to -1

저 같은 경우에는 이걸 하고 싶지 않았어요.다음 코드를 사용하여 반올림을 했는데, 모든 엣지 케이스를 잘 처리할 수 있을 것 같습니다.

private static long floor(double a)
{
    return (int) Math.floor(a);
}

가장 큰 int 또는 가장 긴 int보다 두 배 더 큰 int를 주면 무엇을 반환하시겠습니까?

(확실히 가장 큰 길이보다 크면 정밀도는 낮아집니다.가장 가까운 이론 정수는 아닐 수 있지만...)

Java에 정수 분할과 부동소수점 분할이 있는 것처럼 플로어에는 정수 분할과 부동소수점 분할이 있습니다.

double f = Math.floor(x);

또는

int k = (int) x; 

그러나 유한 정밀도 산술로 바닥을 사용할 때는 항상 주의해야 합니다. x의 계산 결과 1.9999999가 나올 수 있으며, 두 형태 모두 2가 아니라 1로 표시될 수 있습니다.일부 입력 값에 대해 잘못된 결과를 생성하지 않기 위해 이 제한을 회피할 필요가 있는 알고리즘이 많이 있습니다.

따라서 일련의 계산을 통해 오류 및 기타 정수 이외의 값을 올바르게 캐스케이드할 수 있습니다.

예를 들어 NaN(Not a Number)을 Math.floor에 입력하면 NaN이 전달됩니다.

정수를 반환한 경우 이러한 상태나 오류를 전달할 수 없으며, 이전 계산에서는 보기에는 양호하지만 이후 처리 후에는 잘못된 결과를 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/511921/why-does-math-floor-return-a-double

반응형