Gabriela_banova
12 Точки
MiBuena
7 Точки
Здравейте,
за тази задача се опитвам да намеря решение от 2 дни и все не ми се струват достатъчно прецизни.
Ако се ползва double при директен опит за сравняване като:
if (numb[i] % 1 != 0), се подчертават от ReSharper-a, че може да доведе до грешка.
За Double.Epsilon в MSDN пише, че не се препоръчва да се ползва, когато се сравнява дали две числа са равни.
Накрая стигнах до ето такова решение, но не съм убедена дали е най-оптималното.
Ако някой по-напреднал следи темата, може ли да сподели?
Ако в реална работна обстановка ни се случи да решаваме подобна задача, как трябва да постъпим?
Благодаря!
Не смятам, че съм от "по-напредналите", но коментирах малко по-нагоре относно Double.Epsilon. Отне ми известно време ровене в stackoverflow, преди да си формулирам как точно да напиша проверката, за да работи добре. Не знам дали е най-оптималното решение, но се надявам да ти е от полза.
Това, което пише в страницата на майкрософт, е за общия случай на сравняване на две double числа - в такъв случай разликата между тях може да е доста голяма.
В нашия случай, знаем, че разликата между двете числа ще е < 1 (реално ще представлява числата след запетаята), и използването на absolute error става за този специфичен случай.
Ако решим да сравняваме много различни double числа (примерно 3.5 и 8483843.7 , а не 3.5 и 3.0), ще използваме relative error (както l.s.bozhinov го е направил по-нагоре).
По принцип, наистина е по-добра идея да се използва relative error, но за тази специфична задача Double.Epsilon върши работа.