자바 기초 부동 소수점 연산
public class FloatTest1 {
public static void main(String[] args) {
int intMax=Integer.MAX_VALUE;
int intMin=Integer.MIN_VALUE;
long longMax=Long.MAX_VALUE;
long longMin=Long.MIN_VALUE;
float fintMax=intMax;
float fintMin=intMin;
double dlongMax=longMax;
double dlongMin=longMin;
System.out.println(“int :”+intMax);
System.out.println(“ float :”+fintMax);
System.out.println(“int :”+intMin);
System.out.println(“ float :”+fintMin);
System.out.println(“long :”+longMax);
System.out.println(“ float :”+dlongMax);
System.out.println(“long :”+longMin);
System.out.println(“ float :”+dlongMin);
}
}
실행 결 과 는 다음 과 같다.int 유형의 최대 치 는 2147483648 에서 float 를 사용 하여 저장 한 후:2.14748365E9 int 유형의 최소 치 는:-2147483648 에서 float 를 사용 하여 저장 한 후:-2.14748365E9 long 유형의 최대 치 는 9223373686854775807 에서 float 를 사용 하여 저장 한 후:9.223736854776 E18 long 유형의 최소 치 는:-9223372036854775808 에서 float 를 사용 하여 저장 한 후:-9.22372036854776 E18 결 과 를 통 해 알 수 있 듯 이 float 형식의 변 수 를 사용 하여 수 치 를 저장 하 든 doubel 형식의 변수 로 수 치 를 저장 하 든 모두 일정한 정밀도 가 손실 되 었 고 부동 소수점 으로 출력 할 때 정확 한 결 과 를 출력 하지 못 했다.부동 소수점 결함 2.부동 소수점 을 테스트 하여 작은 데 이 터 를 저장 합 니 다.
public class FloatTest2 {
public static void main(String[] args) {
for(float f=0.1f;f<1;f+=0.1){
System.out.println(f);
}
for(double d=0.1f;d<1;d+=0.1){
System.out.println(d);
}
}
}
운행 결 과 는 다음 과 같다.그러나 결 과 는 이처럼 만 족 스 럽 지 못 했다.두 가지 예 를 통 해 알 수 있 듯 이 저 장 된 수치 든 작은 수치 든 부동 소수점 은 매우 정확 하지 않다.부동 소수점 은 컴퓨터 에서 비슷 한 저장 일 뿐 1/3 과 같은 무한 소수 로 부동 소수점 으로 도 정확하게 표시 할 수 없다.여기 서 주의해 야 할 것 은 두 번 째 예 에서 우 리 는 0.1~0.6 의 출력 결과 가 정확 하고 0.7 부터 오차 가 발생 하 는 것 을 보 았 다 는 것 이다.사실은 우리 눈 이 속 았 어.float f=0.1f 를 실행 할 때 컴퓨터 의 데 이 터 는 순수한 0.1 이 아니 라 0.1000~000xxx 와 유사 한 형식 입 니 다.그 중에서 000~000 은 몇 개의 0 을 표시 하고 xxx 는 몇 개의 숫자 를 표시 합 니 다.그 데 이 터 를 0.100000011111 이 라 고 가정 하면 folat 유형 은 7~8 비트 의 유효 숫자 만 유지 할 수 있 습 니 다.그러면 중간 에서 차단 되 어 float 저장 의 값 은 0.1000000 이 됩 니 다.즉 부동 소수점 수치 0.1.2.부동 소수점 크기 비교
public class FloatTest3 {
public static void main(String[] args) {
double d1=0.1;
double d2=0.2;
double d3=d1+d2;
if(d1+d2==0.3){
System.out.println(“d1+d2==0.3″);
}else{
System.out.println(“d1+d2!=0.3″);
System.out.println(d3);
}
}
}
결 과 는 다음 과 같다:d1+d2!=0.3 0.300000000000004 는 부동 소수점 저장 에 일정한 오차 가 있 으 므 로 부동 소수점 으로 똑 같은 비 교 를 하지 말고 혼합 비교 도 하지 말 라 는 것 을 다시 한 번 설명 한다(예 를 들 어 int 와 float 의 비교).3.수량 급 의 차이 가 매우 클 때 부동 소수점 의 연산 은 부동 소수점 을 사용 할 때 주의해 야 한다.그것 은 수량 급 의 차이 가 너무 큰 수 사이 에 가감 연산 을 하지 않 는 것 이다.그러면 원수 급 의 비교적 큰 조작 수 를 바 꿀 수 없 을 것 이다.상황:
public class FloatTest4 {
public static void main(String[] args) {
float f1=16777216f;
float f2=f1+1;
if(f1==f2){
System.out.println(“f1 f2″);
}else{
System.out.println(“f1 f2″);
}
System.out.println(“f1=”+f1);
System.out.println(“f2=”+f2);
}
}
결 과 는 다음 과 같다.f1 은 f2 f1=1.6777216E 7 f2=1.6777216E 7 과 같다.이것 은 부동 소수점 의 내부 표시 와 관련 이 있다.여 기 는 부동 소수점 의 복잡 한 저장 원 리 를 무시 할 필요 가 없다.부동 소수점 은 비슷 한 저장 일 뿐 이 고 그 저장 값 이 클 수록 손실 의 정밀도 도 클 수록 수량 급 차이 가 큰 가감 요 소 를 누 르 면 원 하 는 결 과 를 얻 지 못 할 것 이다.무슨 문제 나 견해 가 있 으 면 환영 합 니 다팔 영 객 단체 블 로그토론 하 러 오 세 요.80 객 팀 구성원 은 언제든지 환영 합 니 다!추 후 결과 의 정확성 을 확보 하 는 자바 류 에 대해 설명 하 겠 습 니 다.
본문
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.