Int32.MaxValue Field
Loading...
+ Нов въпрос
kosama11 avatar kosama11 16 Точки

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

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

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

Тагове:
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 SoftUni Team 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