Loading...
ioanna.konova avatar ioanna.konova 47 Точки

[Homework] C# Basics - Primitive Data Types and Variables - Comparing Floats

Здравейте! smiley

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

Разгледах доста постове по този въпрос във форума, но още повече се обърках.

Благодаря много предварително! blush

1
Programming Basics
ioanna.konova avatar ioanna.konova 47 Точки

Мисля, че си оправих грешките - ТУК. Но все още не мога да разбера едно нещо.

Така...

Числата, които връщат резултат TRUE и тяхната разлика са съответно:

1) 5.00000001 и 5.00000003 = 5.00000003 - 5.00000001 = 0.00000002;
2) 5.00000005 и 5.00000001 = 5.00000001 - 5.00000005 = - 0.00000004;
3) -0.0000007 и 0.00000007 = 0.0000007 - (- 0.00000007) = 0.00000077;

Разликите и на трите числа са < от eps /0.000001/.

Това, което не мога да разбера е защо последната двойка числа 4.999999 и 4.999998 връща резултат FALSE, тъй като разликата им е 4.999998 - 4.999999 = - 0.000001, което също е < от eps /0.000001/. Следователно резултатът би трябвало да TRUE, а не FALSE!

Правилно ли мисля или някъде пак бъркам???

1
05/11/2015 23:52:02
raging avatar raging 92 Точки

Explanation : Border case. The difference 0.000001 == eps. We consider the numbers are different.

1
a_angelov_angelov avatar a_angelov_angelov 2 Точки

using System;

class ComparingFloats
{
    static void Main()
    {
        double firstNumber = double.Parse(Console.ReadLine());
        double secondNumber = double.Parse(Console.ReadLine());

        bool areEqual = Math.Abs(firstNumber - secondNumber) < 0.000001;
        //Math.Abs - Returns the absolute value of a specified number.    

        Console.WriteLine(areEqual);
    }
}


Минусът е проблема при последните два случая (минус * минус == плюс), от което следва че е необходимо да вземеш абсолютните стойности на input-a. Това става с метода Abs от класа Math -> Math.Abs()

1
ioanna.konova avatar ioanna.konova 47 Точки

Да, май вече наистина си открих грешките.

Първата е, че изваждах от 2-то число 1-то, а то трябва да е обратното - от 1-то да извадя 2-то число

Втората ми грешка е, че въобще не се сетих да използвам Math.Abs.

Но важното е, че накрая ми се получи /поне така мисля, де smiley/.

Даже бих дала съвет да използвате това: Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;, за да не гърми на проверяващите, които използат "." вместо ",".

Ето и крайния ми вариянт - ТУК.

Поздравчета smiley

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