Loading...
kosama11 avatar kosama11 16 Точки

Програма за решаване на квадратни уравнения

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

Не мога да си обясня защо там където е "var discriminant = 0;" debugger-а ми показва, че е равно на 2147.....

Тагове:
0
Programming Basics
Luko193 avatar Luko193 342 Точки

Можеш ли да дадеш кода, за да се разбере по-добре защо се получава така?

0
kosama11 avatar kosama11 16 Точки

http://pastebin.com/vxm6kdFZ

0
vpl2001 avatar vpl2001 54 Точки

Int32.MaxValue Field

The value of this constant is 2,147,483,647; that is, hexadecimal 0x7FFFFFFF.

 

0
kosama11 avatar kosama11 16 Точки

е да, но защо е зададено още в началото, там би трябвало да е равно на 0, а след изчислението на resultA + resultB трябва да си стане 81 а то взема стойност по-долу от кода.

0
Innos avatar Innos 419 Точки

Този код:

            var squareRoot = int.MaxValue;
            for (int i = 0; i < squareRoot; i++)
            {
                if (i * i == discriminant)
                {
                    discriminant = i;
                }
            }
Някъде в далечното бъдеще i става равно на 2147483645, от умножението със себе си резултата прелива над int-a и дава фалшиви стойностти, по чист късмет последните 32 бита от умножението на i * i са точно битовата репрезентация на числото 9 което е оригиналната стойност на която нагласяш discriminant някъде в началните цикли на for-a. Честно казано е доста впечатляващо :) .

За самото показване на стойностти в дебъгера, стойностите на променливите отразяват състоянието им на позицията на която е спрял дебъгера, понеже discriminant е една и съща променлива където и в кода да я посочиш ако текущата и стойност на реда на който си break-нал е X то тя ще отразява стойността X навсякъде.

3
25/08/2016 22:31:05
StaVykoV avatar StaVykoV 169 Точки

Сложи един брейк на цикъла след като намери корена и всичко ще е наред. И аз стигнах до извода на колегата след малко дебъгване.

1
VanessaShopping avatar VanessaShopping 48 Точки

Един съвет. Не ползвай много много var ако знаеш от какъв тип ще е променливата. 

Когато зададеш VAR alabala = 5;   тази петица е реално е INT и по този начин Var = Int

Ако зададел VAR alabala = 5.0; това си е double . и това е малко кофти ако смяташ СУМИ и ПАРИ :) понеже с double понякога няма да ти излизат верни резултати.

Ако ти трябва по-голямо число примерно Long с Var няма да стане така.

Може да го направиш така: var alabala = (long)5; , но смятам ,че long alabala = 5; е по-лесния вариянт.

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