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 328 Точки
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
DimiTVP avatar DimiTVP 54 Точки

Аз съм го направил с double и не е нужно да кастваш Math.Pi

1
DimiTVP avatar DimiTVP 54 Точки

Това е моето:
http://pastebin.com/SiCHrmuG

1
ladymira avatar ladymira 5 Точки

Благодаря ви много! С double работи идеално, и наистина не е нужно кастването на Math.PI. Но не мога да си обясня защо с decimal ми дава такава грешка. Щеше да е добре, ако ги имаше тестовете, та да може да си дебъгва човек.

Предполагам че умишлено са скрити тестовете, за да може всеки да се главоблъска с домашното. Имате ли представа дали на по-късен етап ще публикуват и тестовете? Интересен ми стана този казус, защо ми даде грешка на decimal...

0
DimiTVP avatar DimiTVP 54 Точки

Пробвах твоя вариант без да каствам Math.Pi и ми казва: 

Operator '*' cannot be applied to operands of type 'double' and 'decimal'
Предполагам, че Маth.Pi е Double и за това трябва да се каства ако другите типове са ти Decimal.
0
smu4k avatar smu4k 34 Точки

Ами не, тестовете са само достъпни на Admin-и

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