Максимальное количество знаков после запятой в C - PullRequest
0 голосов
/ 24 августа 2018

Я столкнулся с небольшой проблемой. Я пытаюсь выяснить, содержит ли ответное число число в C. Однако я не могу напечатать ответное число, превышающее 15 знаков после запятой, используя float или double. Как я могу сделать так, чтобы было как можно больше десятичных знаков (например, более 100 ++)?

Решение:

char output[10000];
void divide(int a, int b, char *c, int d)
{
    if (d == 10000)
        return;
    int e = a/b;
    int f = (a%b)*10;
    if(d>=1)
        c[d+1] = e + '0';
    divide(f, b, c, d+1);
}

1 Ответ

0 голосов
/ 24 августа 2018

Форматирование printf здесь не проблема. Это тип данных, который есть. Числа с плавающей точкой в ​​C используют кодировку IEEE 754.

Этот тип кодирования использует знак, значение и показатель степени.

Из-за этой кодировки многие числа будут иметь небольшие изменения, чтобы их можно было сохранить. Кроме того, число значащих цифр может немного измениться, поскольку это двоичное представление, а не десятичное.

Одинарная точность (float) дает вам 23 бита значения, 8 битов показателя степени и 1 знаковый бит.
Двойная точность (double) дает вам 52 бита значений, 11 битов показателя степени и 1 знаковый бит.

Наименьшее положительное число, которое вы можете сохранить в двойном значении, составляет примерно 2⨯10-308, не считая денормализованных чисел, которые могут быть меньше. Они имеют эквивалент примерно 15-17 цифр точности, что достаточно для измерения диаметра Земли с точностью до размера эритроцита, самой маленькой клетки в организме человека.

Следовательно, вам нужна библиотека больших чисел для решения вашей проблемы.

Я предлагаю HPALIB , поскольку это простой инструмент для решения вашей проблемы. Пожалуйста, будьте осторожны, что такое большое число займет много памяти.

...