Можно ли вручную увеличить точность двойной битовой строки с помощью вычислений - PullRequest
1 голос
/ 11 января 2020

Чтобы создать число с плавающей запятой из десятичного значения, нам нужно иметь знаковый бит, экспоненту и мантиссу.

Двойная точность использует 11 экспонентных битов и 52 битов мантиссы.

Допустим, мы хотим сохранить 0.3. Мы можем найти мантиссу, выполнив следующее:

0.3 * 2 = 0.6 => 0
0.6 * 2 = 1.2 => 1
0.2 * 2 = 0.4 => 0
0.4 * 2 = 0.8 => 0
0.8 * 2 = 1.6 => 1
0.6 * 2 = 1.2 => 1
...
Answer:
01001100110011...

В C# Я могу сделать это с помощью следующего кода:

double value = 0.3;
StringBuilder bitString = new StringBuilder();

for (int i = 0; i < 53; i++)
{
    value *= 2;
    if (value >= 1)
    {
        bitString.Append("1");
        value--;
    }
    else
    {
        bitString.Append("0");
    }
}
  1. Можно ли взять существующая мантисса из двойника и продолжение этого процесса, чтобы найти дополнительные биты? Я знаю, что это не будет работать для определенных значений, но что, если у меня есть точное число, такое как 0.123, и я знаю, что все остальные цифры равны 0. 0.1230000000 ...
  2. Кажется, у моего кода выше есть проблема , Поскольку я использую удвоение для своего умножения, у меня есть только 15-17 цифр точности. Возможно, что во время моей ситуации умножения на 2 немного отклонится от конечного числа битов, которые я могу точно сохранить. Можно ли обойти это без необходимости в более крупном типе, таком как System.Decimal?

Цель здесь - получить битовую строку, которая содержит более 53 бит действительных значений. данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...