3
두 개의 long 값의 지수 부분 (모듈로 1)을 가져 오려고합니다.Java에서 longs 나누기 분수 가져 오기
long dividend = 50L;
long divisor = 3L;
float n1 = (dividend % divisor)/(float) divisor;
float n2 = (dividend/(float) divisor) % 1;
System.out.println(n1);
System.out.println(n2);
위의 내용은 다음과 같이 인쇄됩니다.
0.6666667
0.66666603
부동 소수점 정밀도가 어떻게 작동하는지 잘 모른다.
왜 두 번째 (더 명확한) 구현이 첫 번째 구현보다 덜 정확합니까?
'float'은 6 ~ 9 자리의 십진수 만 사용할 수 있기 때문에. 50/3은 16.666666이지만 정수 부분을 제거하여 0.666666이되면 마지막 자리를 넘어서는 'float'의 부정확성이 분명 해집니다. 먼저 계산 한 다음 자릿수를 제거하면 정밀도가 떨어집니다. 예 : 부동 소수점 숫자가 왜 부정확합니까?] (http://stackoverflow.com/q/21895756/5221149) – Andreas
우우, 알았어! 고맙습니다! 또한 더 많은 독서에 대한 링크에 감사드립니다. 답변을 게시하려면 동의하겠습니다. 그렇지 않으면 나중에 쓸 수 있습니다. 다시 한 번 감사드립니다! –