У меня есть две целые переменные, partial
и total
. Это прогресс, поэтому partial
начинается с нуля и увеличивается один за другим до значения total
.Разделение двух целых чисел без литья в double
Если я хочу, чтобы получить значение дроби, показывающее ход (от 0.0 до 1.0), я могу сделать следующее:
double fraction = double(partial)/double(total);
Но если общая сумма слишком велика, преобразование в два раза может привести к потере информации.
Фактически, количество потерянной информации допустимо, но мне было интересно, есть ли алгоритм или функция std, чтобы получить долю между двумя значениями, теряя меньше информации.
'double' имеет 53 бит мантиссы - вы говорите, что' total' может быть> 53 бит? –
Каковы типы данных 'partial' и' total'? IIRC «double» может содержать любое значение, 32-битовое целое может без потери точности. –
Ну, 'total' должно иметь значение'> 2^53', которое составляет примерно 16-значное число в десятичном формате. Я действительно задаюсь вопросом, есть ли у вас такие большие числа. В этом случае я надеюсь, что ваши целые числа равны 64 битам, так как в противном случае их не хватит в первую очередь. –