|
|
|
|
|
|
Вернуться
1 Иванов Иван, 21 сентября 2021 г. 12:05:21 | |
Требуемая точность возрастает квадратично (в примерах ошибки округлены, 1.15 обозначено за t): 503 * t^3 = 765 + 0.13e-3 88 * t^5 = 177 - 0.57e-3 176.1 * t^4 = 308.0 + 0.06e-5 100.3 * t^6 = 232.0 - 0.52e-5 8.02 * t^25 = 264.01 + 0.11e-7 233.13 * t^8 = 713.15 - 0.56e-7 149.327 * t^10 = 604.111 + 0.06e-9 83.499 * t^7 = 222.109 - 0.74e-9 209.3009 * t^6 = 484.1257 + 0.16e-11 69.5670 * t^9 = 244.7281 - 0.68e-11 11.80597 * t^17 = 127.04716 + 0.15e-13 53.99267 * t^19 = 768.41135 - 1.66e-13 Проблемы начинают появляться уже при 5 знаках после запятой, когда требуемая точность достигает точности double. Вот так ведет себя предпоследний пример при неаккуратном вычислении: print(11.80597 * t**17) # 127.04715999999986, хотя на самом деле больше 127.04716!
|
|
|
2 Меньшиков Фёдор Владимирович, 20 сентября 2021 г. 21:35:11 | |
Иванов Иван, так предложите тесты с ошибкой в обе стороны. Мне интересно. Для чистоты эксперимента найдите какая максимальная точность в тестах задачи (думаю 2-3 знака после запятой) и в предложенных тестах используйте такую же. Понял, что если дать вещественное число с 30 знаками читать, то ошибка будет куда угодно, хоть вверх, хоть вниз.
|
|
|
3 Черепанв Ивн це эс шст шст пят сбк пе эм тчк эм е, 18 сентября 2021 г. 19:18:17 | |
Фёдор, так далекл я не копал. Простейшее решение без eps не проходит, а в целых числах зашло. Рациональное решение легко свести к целочисленному.
|
|
|
4 Иванов Иван, 18 сентября 2021 г. 12:58:37 | |
Фёдор Владимирович, а как сравнение с eps поможет, ошибка же в обе стороны может быть? На каком-то шаге может получиться как y-eps, так и y+eps. Точность входных данных не задана, так что подобрать можно.
|
|
|
5 Меньшиков Фёдор Владимирович, 17 сентября 2021 г. 21:59:10 | |
Ивн, а у Вас есть тест, где не хватает double + сравнение с eps для компенсации неточности?
|
|
|
6 Черепанв Ивн це эс шст шст пят сбк пе эм тчк эм е, 14 сентября 2021 г. 5:40:03 | |
В этой задаче точности double недостаточно. Нужно решать в рациональных числах, считая исходные данные точными рациональными значениями. Обрабатывать научную нотацию не нужно.
|
|
|
7 Ханин Алексей Павлович, 13 сентября 2021 г. 21:01:51 | |
#include <iostream> #include <cmath> using namespace std; int main(){ double x,y; int a=1; cin >> x >> y; while (x<y){ x=x+x*15/100; a++; } cout << a; return (0); } Проходит первые 13 тестов, дальше тупик, хотя вроде всё правильно Задача 1128. Утренняя пробежка
|
|
|
Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!
| | | |