Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

MiBuena avatar MiBuena 7 Точки

Здравейте,

за тази задача се опитвам да намеря решение от 2 дни и все не ми се струват достатъчно прецизни.

Ако се ползва double при директен опит за сравняване като:               
if (numb[i] % 1 != 0), се подчертават от ReSharper-a, че може да доведе до грешка.

За Double.Epsilon в MSDN пише, че не се препоръчва да се ползва, когато се сравнява дали две числа са равни. 

Накрая стигнах до ето такова решение, но не съм убедена дали е най-оптималното.

Ако някой по-напреднал следи темата, може ли да сподели?

Ако в реална работна обстановка ни се случи да решаваме подобна задача, как трябва да постъпим?

Благодаря!
 

1
21/09/2015 01:16:56
l.s.bozhinov avatar l.s.bozhinov 1 Точки

Не смятам, че съм от "по-напредналите", но коментирах малко по-нагоре относно Double.Epsilon. Отне ми известно време ровене в stackoverflow, преди да си формулирам как точно да напиша проверката, за да работи добре. Не знам дали е най-оптималното решение, но се надявам да ти е от полза. 

0
21/09/2015 13:14:31
Gabbs avatar Gabbs 80 Точки

Това, което пише в страницата на майкрософт, е за общия случай на сравняване на две double числа - в такъв случай разликата между тях може да е доста голяма.

В нашия случай, знаем, че разликата между двете числа ще е < 1 (реално ще представлява числата след запетаята), и използването на absolute error става за този специфичен случай.

Ако решим да сравняваме много различни double числа (примерно 3.5 и 8483843.7 , а не 3.5 и 3.0), ще използваме relative error (както l.s.bozhinov го е направил по-нагоре).

По принцип, наистина е по-добра идея да се използва relative error, но за тази специфична задача Double.Epsilon върши работа.

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