Професионална програма
Loading...
ladymira avatar ladymira 5 Точки

Data Types and Methods, problem 02 - Circle Area (Precision 12)

Здравейте!

Условието е при подаден радиус реално число да се получи лицето на кръга с точност до 12-тия знак. Моля да ме насочите къде ми е грешката, дава ми грешни отговори на 3-ти и на 4-ти тест в джъджа. Самите тестове не знам къде да ги видя, за да си открия сама грешката. С данните от условието отговорите ми са точни, но за тези 3-ти и 4-ти тест не знам какви данни се подават и защо ми дава грешка. Ето го кода ми:

http://pastebin.com/Jp82pg0Z

Тагове:
0
Programming Fundamentals
KrasimirPetkov avatar KrasimirPetkov 331 Точки
Best Answer

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

Ето какво се получава при използване на еднакви стойности с double и decimal:

Радиус при double -  3000, лице: 28274333.882308100000

Радиус при decimal - 3000, лице: 28274333.882308110000

Кодът, който съм използвал:

using System;

class Program
{
    static void Main()
    {
        double r1 = double.Parse(Console.ReadLine());
        decimal r2 = decimal.Parse(Console.ReadLine());
        double result1 = Math.PI * r1 * r1;
        decimal result2 = (decimal)Math.PI * r2 * r2;
        Console.WriteLine("{0:f12}", result1);
        Console.WriteLine("{0:f12}", result2);
    }
}

 

 

3
19/05/2016 15:49:15
ladymira avatar ladymira 5 Точки

Благодаря, колега. Точно това се чудех и аз, след като decimal е с по-галям обхват, защо с doublе работи, а с decimal не ще да работи. Явно 3-тия и 4-тия тест са с някакви такива по-големи стойности от порядъка на хиляди, и оттам идва разминаването.

Благодаря на всички още веднъж. Поздрави!

0