/ / C ++ Чи можете ви зберегти подвійний або плаваючий з кінцевими нулями (НЕ рядок або вихід)? [замкнутий] - c ++, подвійний, точний, нульовий, кінцевий

C ++ Ви можете зберегти подвійне або плаваюче з кінцевими нулями (НЕ рядок або вихід)? [closed] - c ++, double, precision, zero, ending

Я знаю, що існує безліч способів урізати або додати кінцеві нулі до вашого подвійного, використовуючи точність виведення або перетворення в рядки.

Але чи є спосіб зберегти нулі на фактичному подвійному, плаваючому або іншому типі даних, що зберігає кінцевий 0. Як і в .1! = .10

Причина полягає в тому, що нуль показує, що ми знаємо, що наступна цифра - нуль. .1 показує все, що ми знаємо, до 1, а не після.

Звичайно, я можу перетворити на рядок або зробитиспеціальний клас, який відстежує його. Я використовую багато подвійних, хоча, і хотів би пропустити деякі роботи навколо, як це, якщо це можливо. Все, що я можу знайти, - це способи, щоб зіткнутися з рядками і виведенням. Щось схоже на double.precision (x) =)

Дякую! -Тим

Відповіді:

4 для відповіді № 1

Формати IEEE з плаваючою комою не мають декількох способів зберігати одне і те ж (кінцеве, ненульове) значення, тому ні, ви не можете зробити це внутрішньо для числової змінної.

Вам потрібно буде тримати пару (value, precision) (або (value, sigfigs) або (value, uncertainty) - в залежності від того, що для вас найважливіше).


0 для відповіді № 2

Значення з плаваючою точкою фактично зберігають кінцеві нулі аж до точності, яку диктує формат.

Наприклад, double зберігає приблизно 17 значущих цифр.

Тому, коли ми маємо a double люблю 0.1, значення фактично зберігається як щось подібне 0.10000000000000000 (у двійковому, а не як рядок, як я написав тут). Так ми знати наступну цифру після 1 є 0.