Loading...
totopopov avatar totopopov 1 Точки

Programming Basics Exam - 8 November 2014

Здравейте!

Докато решавах някоя друга задачка се натъкнах на следната зависимост. Когато кастна (int) даден параметър от (double), ми дава резултат с едно по-малко, когато е кастнат "maxprofit " = 210160 дава 210159.

Това е сорс кода: http://pastebin.com/RAbpbars , Моля игнорирайте начина по-който е написана. 

Вероятно правя нещо което не осъзнавам и затова се получава така..Моля за обяснение.

Благодаря предварително!

Тагове:
0
Programming Basics
alabama415 avatar alabama415 101 Точки

Някой по вещ може да ти обясни, за мен отговора е в това че когато кастваш от double към int имаш загоба на информация. На това се дължи разликата ако ти се гледа обяснение: https://softuni.bg/trainings/resources/video/8767/video-screen-19-may-2016-svetlin-nakov-programming-fundamentals-may-2016

Нещо от сорта е double е 64, a int e 32 бита и се губи информация и на това се дължи грешката, но може би някой малко по запознат с това може да обясни по-точно.

0
totopopov avatar totopopov 1 Точки

Благодаря за линка.

0
AntyfrizZz avatar AntyfrizZz 238 Точки

Здравейте,

 

Както каза колегата alabama415, когато кастваш от double към int, дробната част от числото се губи. За примери:

(int) 2.5 = 2; (int)2.999999 = 2. Резултатът е предвидим и използваем, ако кастваш числа, които могат да се поберат в int. Проблем е, когато се опитваш да кастнеш дробно число, което не може да се побере в инт. Тогава резултатът също е предвидим, но е неизползваем. По - подробно обяснение може да намериш на този линк. Не е дълго и е написано доста разбираемо и е на един гугъл разстояние. Съветвам те следващия път да се поразровиш малко преди да потърсиш помощ във форума.

 

Поздрви!

0
totopopov avatar totopopov 1 Точки

Привет, 

потърсих преди напиша и бях видял информацията от линка. Проблема тук обаче е друг. Аз имам следния случая.

Castvam (210160)  ot double към int и почучавам (210159).  В диапазона съм и не би трябвало да има загуба на инфо. Знам че правя нещо грешно но не мога да разбера какво, а имам желанието да разбера защо точно става така. 

 

Не го каствам към Int8 или int16 за да достигам лимита.

Благодаря.

0
AntyfrizZz avatar AntyfrizZz 238 Точки

Здравей,

 

Ако ми дадеш точния инпут с който ти се получава този резултат ще го дебъгна. За момента се сещам една причина. Ако имаш 2 дробни числа и ги кастнеш към инт и ги събереш, резултатът ще е един. Ако 1во събереш двете дробни числа и след това ги кастнеш, резултатът ще е друг.

2.5 + 2.6 = 5.1 >>> (int)5.1 = 5

(int)2.5 = 2

(int)2.6 = 2

2 + 2 = 4

 

Поздрави!

0
desiko avatar desiko 1 Точки

Много странно. То си е цяло число, а се променя като го кастнеш.

0
Innos avatar Innos 419 Точки

Бърза проверка през дебъгера показва че maxprofit-a не е реално 210160 а е 210159.99999999997, при кастване към целочислено число дробната част се губи => съответно резултата е 210159 което е коректното държание.

0
25/08/2016 22:05:08
totopopov avatar totopopov 1 Точки

Благодаря, 

очевидно разминаването се получава поради бинарното представяне на doble.---->линк.  И за абсолютна точност при десетични операции, особено за финансови цели, по-добре  decimal.------>Link.

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