Форум Всеукраїнської інтернет-олімпіади NetOI


На форумі обговорюються лише питання, пов'язані з олімпіадою

Ви не зайшли.

#1 2016-12-27 20:57:30

nikolos00
Новий користувач
Зареєстрований: 2016-12-27
Повідомлень: 2

Bell

Какое значение числа пи использовать? С какой точностью? То в некоторых задачах в авторских решениях используется значение 3.14 и тогда при отсылке задачи некоторые тесты не засчитываются при использовании числа пи с другой точностью.

Відредаговано nikolos00 (2016-12-27 21:02:32)

Поза форумом

 

#2 2016-12-27 21:25:19

Жюри_Непомнящий
Журі
Зареєстрований: 2005-11-03
Повідомлень: 102

Re: Bell

Паскаль понимает пи (pi).

Поза форумом

 

#3 2016-12-27 21:28:24

nikolos00
Новий користувач
Зареєстрований: 2016-12-27
Повідомлень: 2

Re: Bell

Спасибо

Поза форумом

 

#4 2016-12-28 20:01:06

jurij
Новий користувач
Зареєстрований: 2009-01-23
Повідомлень: 37

Re: Bell

Уточните пожалуйста условие задачи. Откуда измеряется уровень воды? Исходя из примера, вода должна скапливаться вверху колокола и каким-то образом поднимать его. Это противоречит здравому смыслу. Или может ответ в примере неверный?

Поза форумом

 

#5 2016-12-29 04:44:39

Dim_ov
Новий користувач
Зареєстрований: 2009-11-29
Повідомлень: 237

Re: Bell

jurij написав:

Уточните пожалуйста условие задачи. Откуда измеряется уровень воды? Исходя из примера, вода должна скапливаться вверху колокола и каким-то образом поднимать его. Это противоречит здравому смыслу. Или может ответ в примере неверный?

Вода накопичується знизу (зі сторони столу, а не зі сторони вершини напівсфери) і відповідь правильна. (Я не автор, можете почекати ще коментаря від нього, але скоріш за все, він підтвердить мої слова).



Взагалі, трохи дивна задача, як на мене. Особливо для третього туру. До алгоритмів і програмування має дуже опосередковане відношення.

Поза форумом

 

#6 2016-12-29 17:14:11

Жюри_Пасихов
Адміністратор
Зареєстрований: 2009-11-08
Повідомлень: 350

Re: Bell

Dim_ov написав:

jurij написав:

Уточните пожалуйста условие задачи. Откуда измеряется уровень воды? Исходя из примера, вода должна скапливаться вверху колокола и каким-то образом поднимать его. Это противоречит здравому смыслу. Или может ответ в примере неверный?

Вода накопичується знизу (зі сторони столу, а не зі сторони вершини напівсфери) і відповідь правильна. (Я не автор, можете почекати ще коментаря від нього, але скоріш за все, він підтвердить мої слова).

Взагалі, трохи дивна задача, як на мене. Особливо для третього туру. До алгоритмів і програмування має дуже опосередковане відношення.

Підтверджуємо. Задача не дивна, відношення має саме пряме.

Поза форумом

 

#7 2016-12-31 12:43:09

LVV
Олімпієць
Звідки: Олешки
Зареєстрований: 2010-11-19
Повідомлень: 308

Re: Bell

За умовою:
"...Відповідь не повинна відрізнятися від правильної більше, ніж на e=10^-6..."

Чи означає це, що у наведеному прикладі відповіді 0.267300 та 0.267302 також є вірними, адже жодна з них не відрізняється від правильної 0.267301 більше ніж на 10^-6

Відредаговано LVV (2016-12-31 17:50:52)

Поза форумом

 

#8 2017-01-01 13:17:19

Dim_ov
Новий користувач
Зареєстрований: 2009-11-29
Повідомлень: 237

Re: Bell

LVV написав:

0.267300 та 0.267302 також є вірними, адже жодна з них не відрізняється від правильної 0.267301 більше ніж на 10^-6

Правильна відповідь - приблизно 0.267300923514. Тому із ваших варіантів підходить тільки 0.267300

Поза форумом

 

#9 2017-01-01 16:48:35

LVV
Олімпієць
Звідки: Олешки
Зареєстрований: 2010-11-19
Повідомлень: 308

Re: Bell

Dim_ov написав:

LVV написав:

0.267300 та 0.267302 також є вірними, адже жодна з них не відрізняється від правильної 0.267301 більше ніж на 10^-6

Правильна відповідь - приблизно 0.267300923514. Тому із ваших варіантів підходить тільки 0.267300

За прикладом в умові задачі правильною є відповідь 0.267301
А оскільки за тією ж умовою "Відповідь не повинна відрізнятися від правильної більше, ніж на http://latex.codecogs.com/gif.latex?%5Cvarepsilon=10^-6", то правильними є також відповіді 0.267300 та 0.267302 адже жодна з них не відрізняється від правильної більше ніж на вказану величину відносної похибки.
В чому я не правий?


P.S.
Цього спору не було б, якби автори не мудрували, а просто вказали до якого знак після коми округляти відповідь.

Відредаговано LVV (2017-01-01 17:28:53)

Поза форумом

 

#10 2017-01-01 17:01:33

Dim_ov
Новий користувач
Зареєстрований: 2009-11-29
Повідомлень: 237

Re: Bell

LVV написав:

В чому я не правий?

В кількох моментах smile

Перший:

LVV написав:

За прикладом в умові задачі правильною є відповідь 0.267301

Ні. За прикладом в умові задачі, відповідь 0.267301 відрізняється від правильної не більше, ніж на ε=10^-6.

Другий:

LVV написав:

на на вказану величину відносної похибки.

Вказана величина абсолютної похибки, а не відносної

Відредаговано Dim_ov (2017-01-01 17:13:23)

Поза форумом

 

#11 2017-01-02 05:04:10

LVV
Олімпієць
Звідки: Олешки
Зареєстрований: 2010-11-19
Повідомлень: 308

Re: Bell

З Новим роком, Dim_ov. smile
Дякую за відповіді.

Поза форумом

 

#12 2017-01-03 16:00:29

Dim_ov
Новий користувач
Зареєстрований: 2009-11-29
Повідомлень: 237

Re: Bell

LVV написав:

З Новим роком, Dim_ov. smile

На взаєм smile

LVV написав:

Цього спору не було б, якби автори не мудрували, а просто вказали до якого знак після коми округляти відповідь.

Не бачу ніякого мудрування. Автори конкретно написали, як буде вестися перевірка (abs(correct - output) < eps). По моєму, зрозуміліше і однозначніше уже нікуди. Якби вони вказали, до якого знаку округляти (або ще гірше - так як тут полюбляли раніше (а може й досі полюбляють... smile), "виводити відповідь без заокруглення"), то питань було б значно більше і питання аналогічне вашому задавав би уже я.


Кількість десяткових знаків після коми не значить абсолютно нічого для чисел стандарту IEEE 754. Можна і float вивести хоч з 20 знаками після коми. Тільки от для чисел порядку 10^3, точність виведеного числа буде все одно +/- 10^-4. А для чисел порядку 10^12 - взагалі +/- 10^5 (і то за умови, що число-відповідь - це константа. Бо для більшості операцій над числами IEEE 754 точність результату буде потенційно меншою за точність операндів). Відповідно, якщо в якійсь задачі відповіддю буде число в районі трильйону, але ваша програма обчислювала його флоатами з одинарною точністю, то можете хоч 10 знаків після коми виводити - відповідь ваша все одно виявиться неправильною, якщо при порівнянні з правильним результатом буде використовуватися епсілон, менший за 100 000.

Відредаговано Dim_ov (2017-01-03 16:09:00)

Поза форумом

 

#13 2017-01-03 17:37:18

LVV
Олімпієць
Звідки: Олешки
Зареєстрований: 2010-11-19
Повідомлень: 308

Re: Bell

LVV написав:

Цього спору не було б, якби автори не мудрували, а просто вказали до якого знак після коми округляти відповідь.

Не бачу ніякого мудрування. Автори конкретно написали, як буде вестися перевірка (abs(correct - output) < eps). По моєму, зрозуміліше і однозначніше уже нікуди. Якби вони вказали, до якого знаку округляти (або ще гірше - так як тут полюбляли раніше (а може й досі полюбляють... smile), "виводити відповідь без заокруглення"), то питань було б значно більше і питання аналогічне вашому задавав би уже я.


Кількість десяткових знаків після коми не значить абсолютно нічого для чисел стандарту IEEE 754. Можна і float вивести хоч з 20 знаками після коми. Тільки от для чисел порядку 10^3, точність виведеного числа буде все одно +/- 10^-4. А для чисел порядку 10^12 - взагалі +/- 10^5 (і то за умови, що число-відповідь - це константа. Бо для більшості операцій над числами IEEE 754 точність результату буде потенційно меншою за точність операндів). Відповідно, якщо в якійсь задачі відповіддю буде число в районі трильйону, але ваша програма обчислювала його флоатами з одинарною точністю, то можете хоч 10 знаків після коми виводити - відповідь ваша все одно виявиться неправильною, якщо при порівнянні з правильним результатом буде використовуватися епсілон, менший за 100 000.

По-перше: значення абсолютної похибки в одну мільйонну якраз і означає, що результат округляється до мільйонних (якщо я не правий, поправте)
По-друге: це олімпіада для школярів України,  а не для академіків-кібернетиків smile які досконало володіють інформацією про представлення числових даних
По-третє: у задачах (і особливо фізичного змісту) точність результату обчислень (абсолютна похибка) не повинна перевищувати точність задання вихідних даних. І коли усі дані в прикладі задані з точністю до десятих то не коректним є представлення результату обчислення з точністю до мільйонних. smile

Відредаговано LVV (2017-01-03 18:17:52)

Поза форумом

 

#14 2017-01-04 02:24:21

Dim_ov
Новий користувач
Зареєстрований: 2009-11-29
Повідомлень: 237

Re: Bell

LVV написав:

По-перше: значення абсолютної похибки в одну мільйонну якраз і означає, що результат округляється до мільйонних (якщо я не правий, поправте)

Так, якщо правильний результат округлити до мільйонних, то отримане значення буде правильним з абсолютною похибкою в одну мільйонну. Але фраза "виводити відповідь з 6/10/30 знаками після коми" по-перше, формально нічого не говорить про необхідну точність виведеного результату, а лише про форматування відповіді. По-друге - може бути трактована неправильно при виведенні результату в експоненційному форматі (обмеження в 6 знаків після коми може бути застосовано до мантиси. І тоді відповіді, більші за 10, будуть неправильними)

LVV написав:

По-друге: це олімпіада для школярів України,  а не для академіків-кібернетиків smile які досконало володіють інформацією про представлення числових даних

Ви занадто поганої думки про учнів smile Не треба бути кібернетиком, щоб зрозуміти, що для точності в 10^-6 достатньо виводити 6 знаків після крапки в десятковому записі (а можна просто підстрахуватися і виводити хоч 20 знаків - теж достатньо проста, для розуміння не-академіками, ідея).

LVV написав:

По-третє: у задачах (і особливо фізичного змісту) точність результату обчислень (абсолютна похибка) не повинна перевищувати точність задання вихідних даних. І коли усі дані в прикладі задані з точністю до десятих то не коректним є представлення результату обчислення з точністю до мільйонних. smile

Не зрозуміло, звідки ви взяли, що вхідні дані задані з точністю до десятих.
1) Ми працюємо не з результатами вимірювань реальними фізичними приладами з певною точністю, а з абстрактними вхідними числами (навіть якщо вони і мають якийсь фізичний сенс) про точність яких нічого в умові не сказано. А значить, їх цілком можна вважати абсолютно точними.
2) Кількість десяткових знаків у записі числа нічого не говорить про його точність. Значення 1.01 може бути виміряним і з точністю до сотих, і з точністю до мільйонних, і навіть з точністю до сотень.
3) В умові нічого не сказано не тільки про точність вхідних значень безпосередньо, але і про рівень їх дискретизації (що можна було б помилково прийняти за рівень точності). Тільки межі допустимих значень. Навіть якщо m >= 0.01, то нічого не завадить дати у вхідних даних m = 0.00100001.

Відредаговано Dim_ov (2017-01-04 02:35:29)

Поза форумом

 

#15 2017-01-04 06:47:58

LVV
Олімпієць
Звідки: Олешки
Зареєстрований: 2010-11-19
Повідомлень: 308

Re: Bell

Dim_ov написав:

Кількість десяткових знаків у записі числа нічого не говорить про його точність.

У звичайному (не експоненційному) записі значень даних в задачах фізичного змісту кількість десяткових знаків говорить про точність їхнього вимірювання (якщо додатково не вказано абсолютну похибку вимірювання).

Dim_ov написав:

Не треба бути кібернетиком, щоб зрозуміти, що для точності в 10^-6 достатньо виводити 6 знаків після крапки в десятковому записі

Не треба бути фізиком, щоб зрозуміти, що для точності 1.0, з яким задано радіус у прикладі до задачі,  достатньо виводити результат з одним знаком після крапки в десятковому (не експоненційному) записі[
За великим рахунком (якщо ми "не занадто поганої думки про учнів smile" ) можна було б у цій задачі взагалі не вказувати точність подання результату обчислень, а лише правильно вказати точність вихідних даних (або хочаб одного з них) наприклад так 1.000000 м. Адже діти з уроків фізики повинні знати до якого знаку робити округлення, особливо в наш час, коли кожен має змогу скористатись електронним калькулятором. smile
Повторюсь: вся ця наша "суперечка" лише з тієї причини, що можна було б в умові записати: результат округляти до мільйонних, замість "намудрованого" існуючого запису. Ну а якщо вже автори так хотіли використати абсолютну похибку, то повинні були б у прикладі дати вихідні дані з коректною точністю, яка вимагається у представленні результату. От і все. smile

Поза форумом

 

#16 2017-01-04 14:42:13

Eritrine
Новий користувач
Зареєстрований: 2017-01-04
Повідомлень: 5

Re: Bell

Жюри_Непомнящий написав:

Паскаль понимает пи (pi).

А як для C++?

Поза форумом

 

#17 2017-01-05 00:41:47

Dim_ov
Новий користувач
Зареєстрований: 2009-11-29
Повідомлень: 237

Re: Bell

Eritrine написав:

А як для C++?

Є кілька способів:

1) взяти M_PI з cmath або math.h.
2) Переписати значення з математичного довідника:

Код:

const double myVeryOwnConstPI = 3.1415926535897932384;

3) Знайти в підручнику з алгебри розділ тригонометрії і скористатися однією з формул, знайдених там. Наприклад:

Код:

const double myVeryOwnComputedPI = acos(-1);

4) Згадати, що зараз 2017 рік, а не 1980! І у вас є можливість скористатися одним чудовим винаходом людства.

Поза форумом

 

#18 2017-01-29 20:08:15

zhylkodima
Новий користувач
Зареєстрований: 2017-01-29
Повідомлень: 3

Re: Bell

Питання до перевірки задачі:
писав цю задачу на С++ і дослідив таку цікаву річ якщо поставити setprecision на значення 8 то задача не пройде 3 останні тести а якщо значення 9 то пройде, хоча враховуючи умову задачі 8 повинно вистачати.
Чим це може бути викликано? І чи можна щось з цим зробити?

Поза форумом

 

#19 2017-01-30 00:02:31

jurij
Новий користувач
Зареєстрований: 2009-01-23
Повідомлень: 37

Re: Bell

zhylkodima написав:

Питання до перевірки задачі:
писав цю задачу на С++ і дослідив таку цікаву річ якщо поставити setprecision на значення 8 то задача не пройде 3 останні тести а якщо значення 9 то пройде, хоча враховуючи умову задачі 8 повинно вистачати.
Чим це може бути викликано? І чи можна щось з цим зробити?

Я столкнулся с этим в прошлом году. Setprecision устанавливает количество значащих цифр. Для того чтобы получить количество цифр после запятой нужно использовать fixed.

/ setprecision example
#include <iostream>     // std::cout, std::fixed
#include <iomanip>      // std::setprecision

int main () {
  double f =3.14159;
  std::cout << std::setprecision(5) << f << '\n';
  std::cout << std::setprecision(9) << f << '\n';
  std::cout << std::fixed;
  std::cout << std::setprecision(5) << f << '\n';
  std::cout << std::setprecision(9) << f << '\n';
  return 0;
}
Output:
3.1416
3.14159
3.14159
3.141590000

Поза форумом

 

#20 2017-01-30 09:48:11

zhylkodima
Новий користувач
Зареєстрований: 2017-01-29
Повідомлень: 3

Re: Bell

jurij написав:

zhylkodima написав:

Питання до перевірки задачі:
писав цю задачу на С++ і дослідив таку цікаву річ якщо поставити setprecision на значення 8 то задача не пройде 3 останні тести а якщо значення 9 то пройде, хоча враховуючи умову задачі 8 повинно вистачати.
Чим це може бути викликано? І чи можна щось з цим зробити?

Я столкнулся с этим в прошлом году. Setprecision устанавливает количество значащих цифр. Для того чтобы получить количество цифр после запятой нужно использовать fixed.

/ setprecision example
#include <iostream>     // std::cout, std::fixed
#include <iomanip>      // std::setprecision

int main () {
  double f =3.14159;
  std::cout << std::setprecision(5) << f << '\n';
  std::cout << std::setprecision(9) << f << '\n';
  std::cout << std::fixed;
  std::cout << std::setprecision(5) << f << '\n';
  std::cout << std::setprecision(9) << f << '\n';
  return 0;
}
Output:
3.1416
3.14159
3.14159
3.141590000

Так але в принципі пресіжен поставлений на 9 проходить усі тести так що фіксед не матиме значення. А на 8 не проходить хоча повинно

Поза форумом

 

#21 2017-01-30 10:36:46

jurij
Новий користувач
Зареєстрований: 2009-01-23
Повідомлень: 37

Re: Bell

zhylkodima написав:

Так але в принципі пресіжен поставлений на 9 проходить усі тести так що фіксед не матиме значення. А на 8 не проходить хоча повинно

при значениях больше 100 точность при 8 оказывается 5 знаков после запятой.

Поза форумом

 

#22 2017-01-30 10:47:06

zhylkodima
Новий користувач
Зареєстрований: 2017-01-29
Повідомлень: 3

Re: Bell

jurij написав:

zhylkodima написав:

Так але в принципі пресіжен поставлений на 9 проходить усі тести так що фіксед не матиме значення. А на 8 не проходить хоча повинно

при значениях больше 100 точность при 8 оказывается 5 знаков после запятой.

Ну добреsad

Поза форумом

 

#23 2017-02-02 07:04:35

LVV
Олімпієць
Звідки: Олешки
Зареєстрований: 2010-11-19
Повідомлень: 308

Re: Bell

jurij написав:

при значениях больше 100 точность при 8 оказывается 5 знаков после запятой.

>99 smile

Поза форумом

 

#24 2017-02-11 21:47:55

jurij
Новий користувач
Зареєстрований: 2009-01-23
Повідомлень: 37

Re: Bell

LVV написав:

jurij написав:

при значениях больше 100 точность при 8 оказывается 5 знаков после запятой.

>99 smile

99,999999 ???
100,000000000000000.... если точно 100, то не зависит от количества знаков после запятой. Так что только больше 100.

Поза форумом

 

Нижній колонтитул

Powered by Likt
© Copyright 2002–2009 Likt