/ / C + + Можете ли да задържите двойно или плувка с последователни нули (НЕ струна или изход)? [затворен] - c ++, двоен, точност, нула, последователност

C + + Можете ли да запазите двойно или float с последователни нули (НЕ струна или изход)? [затворен] - c ++, двоен, точност, нула, последователност

Знам, че има много начини да скъсате или да добавите крайни нули към двойката си, като използвате изходна точност или конвертирате в низове.

Но има ли начин да се запазят нули върху действителния двоен, плаващ или друг вид данни, който поддържа края 0. Както в .1! = .10

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

Разбира се мога да преобразувам в низ, или да направяпотребителски клас, който го следи. Аз обаче използвам много двойки, и бих искал да пропусна някаква работа по този начин, ако е възможно. Всичко, което мога да намеря, е начин да се забъркате с низове и изход, макар и. Нещо като double.precision (x) би било хубаво =)

Благодаря! -Tim

Отговори:

4 за отговор № 1

Форматите с плаваща запетая с IEEE нямат няколко начина да съхраняват същата (крайна, ненулева) стойност, така че не, не можете да направите това вътрешно на цифровата променлива.

Ще трябва да запазите чифт (value, precision) (или (value, sigfigs) или (value, uncertainty) - това, което е най-важно за вас).


0 за отговор № 2

Стойностите на плаваща запетая всъщност съхраняват задържащите нули, до точността, диктувана от формата.

Например, double съхранява приблизително 17 значими цифри.

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