2013-11-03 4 views
1

을 감안할 때 두 배 값 :연속 추가하고 substracting 더블 값

double a 
double b 
b < a 

경우 :

double c = a - b; 
double d = c + b 

다음 않는 두 수를 보증한다 :

d == a ? 

예 :

double c = 20.0d - 2.0d; 
double d = c + 2.0d; 
,

d가 20.0d와 다시 동일 할 것입니까? 그래서 일반적으로 나는 같은 값을 빼거나 더하면 여전히 일까요? 이것은 a = 20.0d 및 b = 2.0d 인 경우에만 해당됩니다. 모든 이중 값에 대해이 값을 확인해야합니다.

내가 예와 시도 :

double s = 4.8d; 
System.out.print(s + "\n"); 
s -= 0.4d; 
System.out.print(s + "\n"); 
s += 0.4d; 
System.out.print(s + "\n"); 

을 결과는 나의 기대를 일치 예를 들어 :

4.8 
4.3999999999999995 
4.8 

그래서 내가해야 할 것입니다.

감사합니다.

+0

'b

답변

1

이것은 20과 2에서 작동하지만 분명히 일반적으로 작동하지는 않습니다. 추가로 표현의 지수 부분을 증가시킬 때 이중 값으로 중단됩니다. 결과는 정밀도를 잃게됩니다.

double a = 1.0/3; 
double b = 0.5; 
double c = a + b; 
double d = c - b; 
System.out.println(a); 
System.out.println(d); 
System.out.println(a == d); 

When you run it, this example prints the following : 값의 지수가 다른 추가 될 때

0.3333333333333333 
0.33333333333333326 
false 

결과는 더욱 두드러지게 여기

는 포인트를 (자바) 간단한 예이다. 당신이 0.5에서 100000b의 값을 변경하는 경우 예를 들어,이 difference would be a lot bigger :

0.3333333333333333 
0.3333333333284827 
false 

변경 1E15-b

0.3333333333333333 
0.375 
false 

1E20-b 원래 a의도 흔적이 사라하게 변경 제공 :

0.3333333333333333 
0.0 
false 
+0

덕분에 많이 :) – friko

0

필요는 없습니다. 예 :

> a=1.1; b=10; (a-b) + b 
1.0999999999999996 
+0

이 예제는 질문의 'b