Софтуерно Инженерство
Loading...
Ifandieva avatar Ifandieva 72 Точки

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
Основи на програмирането 17/04/2017 07:43:54
Tanyo avatar Tanyo 159 Точки

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

 

0
Ifandieva avatar Ifandieva 72 Точки

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

0
Tanyo avatar Tanyo 159 Точки

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

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

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

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

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

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

 

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

1