두 개의 정수 변수 partial
과 total
이 있습니다. 진행 중이므로 partial
이 0에서 시작하여 하나씩 total
의 값으로 올라갑니다.두 개의 정수를 캐스팅하지 않고 두 배로 나누기
double fraction = double(partial)/double(total);
을하지만 전체가 너무 큰 경우, 두배로 변환이 정보가 유실 될 수 있습니다 : 나는 진행을 나타내는 분수 값을 얻고 싶은 경우에
은 (1.0-0.0에서) 나는 다음을 수행 할 수 있습니다.
사실, 잃어버린 정보의 양은 용납 될 수 있지만 두 가지 값 사이의 분율을 줄이는 알고리즘이나 표준 기능이 있는지 궁금합니다.
'double'은 53 비트 가수가 있습니다. '총'이> 53 비트 일 수 있다고 말하는가? –
'partial'과'total'의 데이터 타입은 무엇입니까? IIRC는 'double'은 정확도의 손실없이 32 비트 정수를 저장할 수 있습니다. –
글쎄,'total'은 십진수로 약 16 자리 숫자 인'> 2^53'의 값을 가져야합니다. 너무 큰 숫자가 있는지 궁금합니다. 이 경우에는 정수가 64 비트 너비가되기를 바랍니다. 그렇지 않으면 처음에는 충분하지 않습니다. –