Няма шанс да стане голяма грешка - иначе нямаше да седя и да споря сега :)
Между другото, твърде малко хора наистина разбират какво става в един double, макар че повечето добре знаят за мантиси и експоненти. Грешката става не там обаче, а в представянето на дробната част в двоична бройна система, което не може да стане точно по чисто математически причини - когато умножаваш по 10, 100 и т.н можеш да го представиш същото и с умножение по 2, 4,8 .., обаче като делиш на 10, 100, 1000, не става същото с деление на 2, 4 и 8. Само че грешката при това представяне е едва в последното битче, което записваш. Става натрупване на грешка когато умножаваш реалното число и когато събираш, само че във втория случай натрупването става изключително бавно.
А казвам, че може да се препълни ако ги сумираш в double, просто защото може - в условието е написано, че целочисленото е с неопределен размер.
За да стане номерът с делението на всеки ход, което много добре зная,че е бавно и би могъл да го видиш, ако беше прочел и другата част от постинга ми, е необходимо да разполагаме с double, чиято мантиса е с няколко бита по-голяма от целочисления тип и нищо повече - изчислението ще е точно. При същото положение, обаче, сумирането на целочислените в double ще го препълни много бързо.
Освен това, деление на всеки ход, е просто светкавично в сравнение с решенията, които могат да се прочетат нагоре.
Да добавя, че в условието на задачата се иска да се намери средно аритметично на масив от цели числа, близки до INTMAX и INTMIN, без да се ползват алгоритми за аритметика с големи числа.
При така написано условие, решението с double отговаря - никъде не се споменава нищо за реални числа.
Друг е въпросът, ако условието е подадено грешно, но това не е проблем на решаващия.
______________
Ако искаш изненада, защо просто не се влюбиш?Редактирано от Labrett на 07.03.04 15:34.
|