Loading...
nikolay.dimov83 avatar nikolay.dimov83 143 Точки

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

Здравейте,

Днес се опитах да реша 3-та задача и се оказа, че е доста по - трудна отколкото изглежда. Проблема е, че когато смятам eps (разликата между двете float числа) и предвиждам да е на граничната стойност 0,000001, системата винаги изчислява стойност за eps близка, но по - малка от 0,000001. Съответно финалния отговор на задачата при гранична стойност става True. В заданието е изрично оказано отговора в граничната стойност да е false. Ако за eps + двете първоначални числа ползвам double (въпреки, че в условието изрично е записано юзърските числа да са float) пак не изчислява коректно eps при зададени числа, така че да се получи гранична стойност 0,000001. Говорих с асистентите, казаха, че ако не се използва decimal, а флоат и double вероятно няма да може да се реши проблема.

Ако все пак някой има идея как да стане без decimal, нека сподели - стана ми  интересно :)

Ето го и кода:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace _03.Comparing_Floats
{
    class Program
    {
        static void Main(string[] args)
        {
            double eps;
            float Num1st;
            float Num2nd;
            string StrNum1st;
            string StrNum2nd;
          
            StrNum1st = Console.ReadLine();
            StrNum2nd = Console.ReadLine();


            if (float.TryParse(StrNum1st, out Num1st) && float.TryParse(StrNum2nd, out Num2nd))
            {
                eps = Math.Abs(Num1st - Num2nd);
                Console.WriteLine(eps);
                bool checkEps;
                if (eps < 0.000001)
                {
                    checkEps = true;
                }
                else
                {
                    checkEps = false;
                }
                Console.WriteLine("The 2 numbers you've enetered is a " + checkEps + " statement");


                
            }
            else
                Console.WriteLine("One of the numbers you entered is not correctly formatted");
 
MOD EDIT: Нарушава т.12 от Правилата на форума! Повече от 15 реда копиран код - моля да го коригирате!
Тагове:
3
Programming Basics 26/09/2014 23:34:28
Anonymous:
Нарушава т.12 и т.2 от Правилата на форума.
Линк към дублираната тема: https://softuni.bg/forum/questions/details/43
nikolay.dimov83 avatar nikolay.dimov83 143 Точки

Май открих решение :

След като изчисля eps и преди проверката дали е по - малко от 0,000001, закръглям до 6-тия знак:

eps = Math.Round(eps, 6, MidpointRounding.AwayFromZero);

1
metodiev37 avatar metodiev37 2 Точки

Просто, кратко и ясно:


            double firstNumber = (double.Parse(Console.ReadLine()));
            double secondNumber = (double.Parse(Console.ReadLine()));
            bool equal = Math.Abs(firstNumber - secondNumber) < 0.000001;
            Console.WriteLine(equal);

1
kalaj1234 avatar kalaj1234 1 Точки

Ахахахах егати цар си браат yes

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