[t:/]$ 지식_

스파이더몽키 엔진 플로팅 연산 문제.

2008/08/06

spider money, gecko, floating.

1. 증상.

스파이더몽키 엔진에서 플로팅 연산이 안 되고 죽는다.

js 실행

a = 0.3 입력.

결과

4.231297391278e-3982 뭥미 -_-?

2. 환경.

gcc, linux, PXA320, arm, scratchbox, 스크래치박스.

3. 땜질.

원래 코드가 아키텍쳐 및 정확도 기타 여러가지 여건을 모두 올커버하게 설계된 매우 복잡한 로직을 가지고 있다. 헌데 여기에도 구멍이 있는 듯. 그 코드를 다 들어내자. 어차피 정교한 공학계산을 할 타겟도 아니므로...

jsdtoa.c 에서.

JS_dtostr(.... 찾기

if 0 로 소스 올 주석.

다음 코드로 대체.

sprintf(buffer, "%g", d);  
return buffer;  

이 코드 자체는 보안 홀 및 잠재적 문제점이 있으니 주의.

ARM의 FPU 문제,
컴파일러 문제,
바이트 얼라인 및 워드 사이즈 문제,
GCC 컴파일 옵션 문제,
libm 문제가 모두 아님을 유의.

헉헉 어려운 거 하나 잡았네.
언능 리눅스 디버거 뭐 하나 제대로 공부 좀 해야지 ㅠ.ㅠ

이제 스레드세이프 하게 재빌드 해보자.









[t:/] is not "technology - root". dawnsea, rss