'단정밀도'에 해당되는 글 1건

  1. 2010.03.07 데이터의 정밀도
얼마전 비교적 정확한 산술식을 요하는 컨텐츠를 개발하던 중 AS3에서 지원하는 부동소수점 연산이 부정확하여 곤욕을 치른적이 있다... 물론 모든 언어가 완벽하게 정확하게 표현하는 것을 있을 수 없지만 생각보다 작은 정밀도에 double이나 long...등의 부재에 아쉬움이 남았다. 그래서 Objc에서는 얼마나 정밀도를 보장할까 궁금하여 테스트해보았다.

당연히 int 연산 결과 값보다 float 값이 정확하다

하지만 크기를 생각하여 int와 float, double을 생각하여야 한다.

산술결과는 정수 (*,/) 정수는 int를 반환하고 정수 (*,/) 소수는 double형(배정밀도)으로 반환한다.

int a=25;

int b=2;

float        c=25.0;

float        d=2.0;

NSLog(@"6+a/5*b=%i",6+a/5*b); //16

NSLog(@"a/b*b=%i",a/b*b);     //24

NSLog(@"c/d*d=%f",c/d*d);     //25.000000

NSLog(@"-a=%i",-a);           //-25



* Decimal 산출식 정밀도 테스트

AS3  Number밖에 지원되지않는다. 크기는 어정쩡한 53bit 그래도 큰 값인데...

AS3에서 부동소수점 연산 시 어느 순간에 개의 값이 사라진다..문제가 심각

float 경우 어느 순간에 1.19999999 같이 뒤에 9 연속이 붙는다. 플래시보다야 심각하지만 그래도 심각하다.

double 경우 현재까진 계산이 비교적 정확하다. 하지만 8byte를 차지한다.


double l=0;

int i=0;

for(i=1; i<=100; i++){

l += 0.1;

NSLog(@"l+=0.1 : %f",l);

}

*참고
단정밀도 : 흔히 float의 범위의 정밀도, 32bit(4byte)
배정밀도 : double의 정밀도, 64bit(8byte)
Posted by 버터백통