Чтобы создать число с плавающей запятой из десятичного значения, нам нужно иметь знаковый бит, экспоненту и мантиссу.
Двойная точность использует 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");
}
}
- Можно ли взять существующая мантисса из двойника и продолжение этого процесса, чтобы найти дополнительные биты? Я знаю, что это не будет работать для определенных значений, но что, если у меня есть точное число, такое как 0.123, и я знаю, что все остальные цифры равны 0. 0.1230000000 ...
- Кажется, у моего кода выше есть проблема , Поскольку я использую удвоение для своего умножения, у меня есть только 15-17 цифр точности. Возможно, что во время моей ситуации умножения на 2 немного отклонится от конечного числа битов, которые я могу точно сохранить. Можно ли обойти это без необходимости в более крупном типе, таком как System.Decimal?
Цель здесь - получить битовую строку, которая содержит более 53 бит действительных значений. данные.