Loading...
Ifandieva avatar Ifandieva 71 Точки

Floating-Point Numbers

Здравейте, 

Преговарям математиката от 5-ти клас нататък във връзка с малкото, което знам за програмирането дотук. Реших да напиша с код някои от задачите, които срещам в сборника си. Въпросът ми, свързан с кода от линка по-долу, е за числата с плаваща запетая. Както ще видите, всички числа, които съм предвидила, са double, а в коментари описвам какво и защо правя. В даден момент искам да превърна няколко double в цели числа, за да мога на финала програмата да сравни 4 дроби. За целта умножавам по най-голямото кратно на 10, което компилаторът понася за double.

Правих тестове с няколко различни по големина числа, и очаквах заради числа с по 15-20 знака преди десетичната запетая и още толкова след нея, програмата да гърми, но не се случва нищо подобно.

Понеже имам твърде малко опит в писането на код, интересно ми е дали правилно очаквам:

1. програмата ми да гръмне, като й въведа 35465769973969799743.836849374034083094830948687, при положение, че потребителят е поканен да въведе double

2. пак да гръмне, като поискам да събере или умножи особено горното с нещо подобно на него, заради прехвърлен обхват

3. да гръмне, като поискам сборa или произведението на две такива числа да бъдат умножени с някакво много голямо число, кратно на десет, пак заради обхвата.

Ако очакванията ми са оправдани, то защо програмата не гърми, а изчислява? Нямам пълно доверие в резултатите, когато числата са необозримо големи, иначе с по-поносими числа, работи или поне така ми се струва.

Бих била благодарна и на всякакви коментари изобщо по добрите практики за писане, на базата на това, което виждате тук.

 https://github.com/NellyIfandieva/First-Code-Trials/tree/master

0
Programming Basics 17/04/2017 07:43:54
Tanyo avatar Tanyo 152 Точки

Здравей, избрала си тип, който има достатъчно голям "рейндж" за да не ти даде грешка, при която и да е твоя операция...

 

0
Ifandieva avatar Ifandieva 71 Точки

Но нали double работи коректно с до 15 знака? Колко голямо число ще го накара да излезе от обхват?

0
Tanyo avatar Tanyo 152 Точки

Да, така е, може да очакваш точност до 15 знака (правилно изчисление, без грешка в резултата), но това не пречи да смяташ много по - големи числа, където тези отклонения/грешки не са от толкова голямо значение, а по - важното е да имаш възможност да направиш самото изчисление.

Ако примениш типа на decimal, float... и т.н. ще започнеш да виждаш exeptions или стойности като безкрайности т.н... :)

А какво число би го накрало... ами по голямо от 1.7 * (10 на степен 305)

1
17/04/2017 09:35:08
Ifandieva avatar Ifandieva 71 Точки

Да, всъщност, разбира се, че ще излезе от обхват, когато въведа или достигна число, по-голямо от 1.7е305. 

Остана само да схвана как така "... отклоненията/грешките не са от толкова голямо значение". Но това може би ще трябва да стане на някоя лекция.

 

Благодаря, Tanyo.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.