항상 정밀도를 유지하기 위해 부동 소수점 값을 10으로 스케일링하여 정밀도를 유지합니까?항상 부동 소수점을 10으로 스케일링합니다.
는이 질문은 어떤 수를 Math.pow (10,16) > Math.pow (2,53)
로, Math.pow (2,53)
보다 적은 및 큰Math.pow (10,-15)
이상되는을 포함 적용 나는 희망이 몇 가지 포인트
0.3 - 0.2 //0.09999999999999998
은 스케일링 수
var a = 0.3;
var b = 0.2;
var l = Math.max ("".split.call(a,".")[1].length,"".split.call(b,".")[1].length);
var c;
a *= Math.pow (10,l);
b *= Math.pow (10,l);
c = a-b;
c /= Math.pow(10,l);
console.log(c); //0.1
에
그러나 빼기를하고 unprecise 명백한되는 " 정확한 " 결과를 제공합니다.문제는 임의 부동 소수점 값은 상술 CRITERIAS double value nearest
N에 하지 결과 않는 열 (여기서 Math.pow (10 , n<16)<Math.pow(2,53)
)의 전력 곱한 f<Math.pow(10,-15)
을 일치가된다 (b) -N (a) ?, 다시 으로 나눌 때의 동력은?
위의 발췌문에서 설명한 것과 같습니다.
이 실제 계산이 사용에 대한,이 설명에 난`좋지 않은 오해에 대한
그리고 SRY가
을 말았 그냥 궁금 아니에요, 관심의 문제입니다
왜 실행하지 않습니까? 그것은 단지 9007199254740992 반복입니다 :) – mplungjan
@mplungjan 오직'b'가 항상 같은 수 =) – C5H8NNaO4
권자입니다. 수학은 결코 나의 장점이 아니 었습니다 - +1 흥미로운 문자열 캐스팅과 십진수 길이 계산 후 – mplungjan