Loading...

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

Alexander7337 avatar Alexander7337 15 Точки

Comparing Floats

 

Искам да попитам дали болднатият текст от таблицата наистина излиза 'true'? Всички остнали се получиха.

Това би трябвало да е печатна грешка.

Write a program that safely compares floating-point numbers (double) with precision eps = 0.000001. Note that we cannot directly compare two floating-point numbers a and b by a==b because of the nature of the floating-point arithmetic. Therefore, we assume two numbers are equal if they are more closely to each other than a fixed constant eps. Examples:

Number a

Number b

Equal (with precision eps=0.000001)

Explanation

5.3

6.01

false

The difference of 0.71 is too big (> eps)

5.00000001

5.00000003

true

The difference 0.00000002 < eps

5.00000005

5.00000001

true

The difference 0.00000004 < eps

-0.0000007

0.00000007

true

The difference 0.00000077 < eps

-4.999999

-4.999998

false

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

4.999999

4.999998

false

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

 

 

Тагове:
0
Programming Basics 27/11/2015 20:31:31
Filkolev avatar Filkolev 4482 Точки

Ами в таблицата имаш епсилона, имаш двете числа и разликата им. Разликата е по-малка от епсилона => true.

0
Alexander7337 avatar Alexander7337 15 Точки

Смених концепцията след коментара ти. Според мен има значение, обаче кое е първото число, от което изваждаме второто. Сега това го мъча.

0
Filkolev avatar Filkolev 4482 Точки

Няма значение, ти търсиш каква е разликата между двете числа, т.е. интересува те абсолютната стойност на разликата, а не с какъв знак е. Може би това пропускаш.

1
Alexander7337 avatar Alexander7337 15 Точки

В крайна сметка написах това.  

 {
        double a = 4.999999;              //5.00000001, 5.00000005, -0.0000007, 4.999999, -4.999999, 5.3
        double b = 4.999998;              //5.00000003, 5.00000001, 0.00000007, 4.999998, -4.999998, 6.01
        double eps = 0.000001;
        
        if (b - a >= eps)
        {
            false
        }
        else
        {
            true
        }

}

0
hyparh avatar hyparh 3 Точки

Драснах това набързо и то взе, че даде 100/100 :D Е, даде ги от втория път, понеже първо бях задал float променливи, след което ги смених на double.

 

            double a = double.Parse(Console.ReadLine());
            double b = double.Parse(Console.ReadLine());

            if (a > b)
            {
                if (a - b <= 0.000001)
                {
                    Console.WriteLine("True");
                }
                else
                {
                    Console.WriteLine("False");
                }
            }
            else if (a < b)
            {
                if (b - a <= 0.000001)
                {
                    Console.WriteLine("True");
                }
                else
                {
                    Console.WriteLine("False");
                }
            }

 

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