2011-07-28 5 views
0

문제가 있습니다. OpenGL 렌더링을위한 몇 가지 위치의 위치를 ​​계산 중입니다. 그러나 계산이 잘못되어 렌더링 된 이미지에서 한 픽셀 겹침이 발생합니다. 그리고 그것은 심각한 문제로 보입니다. 이상한 점은 간단한 추가로 오류가 발생한다는 것입니다.Android NDK로드 추가 정확도

모든 행과 열에 대해 0.02를 추가하고 있으며 어디에서도 0,009가 있습니다. 아이디어가 어디서 나왔습니까? 나는 무장 ARM7에서 컴파일러를 변경하려 시도하고 그것은

코드 도움이되지 않습니다

for (int i=0;i<elem;i++) 
    { 
     LOGE("ROW: %d",i); 

     startPosX = -(float)elem*vertSize/2.0f + vertSize/2.0f; 

     for (int j=0;j<elem;j++) 
     { 
      LOGE("Column: %d",j); 
      LOGE("x: %f y: %f vs:%f",startPosX,startPosY,vertSize); 

      Vvertices[((i*elem*3)+j*3+0)] = startPosX; 
      Vvertices[((i*elem*3)+j*3+1)] = startPosY; 
      Vvertices[((i*elem*3)+j*3+2)] = z;    

      positions[i*elem+j].Set(startPosX, startPosY, z); 

      if(randomType) 
       velocity[i*elem+j].Set(getRandom()/speed,getRandom()/speed,getRandom()/speed); 
      else 
       velocity[i*elem+j].Set(0.0f,0.1f/speed,0.0f); 

      startPosX+=vertSize; 
     } 
     startPosY +=vertSize; 

    } 

칼럼 : 85 X : 0.710000 Y : 0.989999 대 : 0.020000

칼럼 : 86 를 x : 0.729999 y : 0.989999 vs : 0.020000

답변

1

수학적 계산을위한 정밀도가 확실해야 할 때 많은 숫자에 지느러미가 없기 때문에 float와 같은 유형을 사용하는 것이 좋지 않을 수 있습니다. 일부 분수에는 10 진수의 유한 표현이없는 것처럼 2 진수로 표시됩니다.

이 문제는 숫자의 기계 표현과 관련이 있으며 사용중인 프로그래밍 언어와 관련이 없습니다. float 및 double 유형을 처리하는 일반적인 방법을 사용하는 많은 언어가이 문제를 가지고 있습니다.

Java 사용자는 이러한 종류의 문제를 처리하기 위해 BigDecimal과 같은 클래스를 사용합니다.

+0

글쎄, 나는 소수점 뒤에 세 자리를 "정확도"라고 부르지 않을 것이다. 0,73은 오류가 발생하는 지점이다. 나는이 값을 무시하려고 시도 할 것이다. – ZZZ

+1

고정 : - startPosX = -elem * vertSize/2.0 f + vertSize/2.0f + j * vertSize; – ZZZ