문제

Java에서 float 및 double의 포함 범위는 무엇입니까?

정밀도가 중요한 항목에 float 또는 double을 사용하지 않는 이유는 무엇입니까?

도움이 되었습니까?

해결책

Java 's Double 클래스에는 유형의 최소 및 최대 값이 포함 된 멤버가 있습니다.

2^-1074 <= x <= (2-2^-52)·2^1023 // where x is the double.

확인하십시오 Min_VALUE 그리고 MAX_VALUE 정적 최종 멤버 Double.

(일부) 사람들은 반올림 오류가 측정 가능한 (작은) 금액으로 계산을 버릴 수 있기 때문에 정확도와 정밀도가 중요한 것들에 대한 부동 소수점 유형을 사용하는 것을 제안합니다.

다른 팁

Java의 기본 데이터 유형

부울 : 1 비트. 값을 참고 거짓으로 만 취할 수 있습니다.

바이트 : 1 서명 바이트 (2의 보완). -128에서 127 사이의 값을 다룹니다.

짧은 : 2 바이트, 서명 (2 개의 보완), -32,768 ~ 32,767

int : 4 바이트, 서명 (2의 보완). -2,147,483,648 ~ 2,147,483,647.

LONG : 8 바이트 서명 (2의 보완). 범위는 -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807입니다.

플로트 : 4 바이트, IEEE 754. 1.40129846432481707E-45 ~ 3.4028234638528860E+38 (양 또는 음수) 범위를 포함합니다.

DOUBLE : 8 바이트 IEEE 754는 4.94065645841246544E-324D ~ 1.79769313486231570E+308D (양 또는 음수) 범위를 포함합니다.

char : 2 바이트, 부호없는, 유니 코드, 0 ~ 65,535

이진 부동 소수점 숫자는 값이 이진 거듭제곱의 이진 정수로 저장되므로 흥미로운 정밀도 특성을 가지고 있습니다.하위 정수 값(즉, 0과 1 사이의 값)을 처리할 때 2의 음수 거듭제곱은 10의 음수 거듭제곱과 매우 다르게 "반올림"됩니다.

예를 들어 숫자 0.1은 1 x 10으로 나타낼 수 있습니다.-1, 그러나 0.1을 정확하게 나타낼 수 있는 밑수 2 지수와 가수의 조합은 없습니다. 가장 가까운 값은 0.10000000000000001입니다.

따라서 0.1 또는 0.01과 같은 값을 사용하여 작업하는 경우가 많지만 작은(0.000000000000001% 미만) 오류는 허용할 수 없는 경우 이진 부동 소수점 숫자는 적합하지 않습니다.

반대로, 10의 거듭제곱이 응용 프로그램에 "특별"하지 않은 경우(10의 거듭제곱은 통화 계산에서는 중요하지만 대부분의 물리학 응용에서는 중요하지 않음) 실제로 이진 부동 소수점을 사용하는 것이 더 좋습니다. 일반적으로 적어도 한 단계 더 빠르며 훨씬 더 메모리 효율적입니다.

Python 문서의 기사 부동 소수점 문제 및 제한 사항 이 문제를 이해하기 쉬운 형식으로 훌륭하게 설명하고 있습니다.Wikipedia에도 좋은 기사가 있습니다. 부동 소수점 이는 표현 뒤에 숨은 수학을 설명합니다.

에서 프리미티브 데이터 유형:

  • float: 그만큼 float 데이터 유형은 단일 정제 32 비트 IEEE 754 플로팅 포인트입니다. 값의 범위는이 논의의 범위를 벗어나지 만 섹션에 지정됩니다. 4.2.3Java 언어 사양의. 권장 사항과 마찬가지로 byte그리고 short, a float (대신에 double) 플로팅 포인트 번호의 큰 배열로 메모리를 저장 해야하는 경우. 이 데이터 유형은 통화와 같은 정확한 값에 사용해서는 안됩니다. 이를 위해서는 사용해야합니다 java.math.bigdecimal대신 수업. 숫자와 문자열 커버 BigDecimal 및 Java 플랫폼에서 제공하는 기타 유용한 클래스.

  • double: double 데이터 유형은 이중 정제 64 비트 IEEE 754 플로팅 포인트입니다. 값의 범위는이 논의의 범위를 벗어나지 만 섹션에 지정됩니다. 4.2.3Java 언어 사양의. 소수점 값의 경우이 데이터 유형은 일반적으로 기본 선택입니다. 위에서 언급 했듯이이 데이터 유형은 통화와 같은 정확한 값에 사용해서는 안됩니다.

값의 범위는 섹션을 참조하십시오 4.2.3 부동 소수점 유형, 형식 및 값 JLS의.

물론 "중요한"물건에 부유물이나 복식을 사용할 수 있습니다 ... 많은 응용 프로그램이 이러한 데이터 유형을 사용하여 크런치 숫자 만 수행 할 수 없습니다.

당신은 부동 소수점 숫자에 관한 다양한 경고를 오해했을 것입니다. 정확한 평등을 비교하십시오, 등등.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top