Форум программистов, компьютерный форум CyberForum.ru

Перебор значений double - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
Amell
0 / 0 / 0
Регистрация: 05.09.2011
Сообщений: 13
05.09.2011, 02:14     Перебор значений double #1
Привет всем, весь день сижу и думаю над алгоритмом следующего

Нам известна функция которая принимает один параметр типа double и возвращает double.

Реализация функции неизвестна, но известны некоторые особенности:
  1. При вызове функции с параметром 0.0, мы получим число меньше нуля
  2. При вызове функции с параметром 1.0, мы получим число больше нуля
  3. Есть лишь единственное значение Х, между 0.0 и 1.0, при которых функция вернет 0

  • Цель - написать функцию перебора чисел от 0.0 до 1.0 чтобы найти при каком значение Х мы получим 0 из функции о которой писалось выше.


Естественно, double - число довольно здоровое, и хотя мы ограничены определенным диапозоном, у нас всеравно остается куча вариантов для перебора.. [0.000000000000001 ; 0.999999999999999] Простой перебор, увеличение Х на 0.000000000000001 в цикле, займет вечность, хотя и будет самым точным..

Пробовал ограничить кол-во перебора с помощью нахождения Х-а при котором передаваемый параметр был минимальным, но так и не придуал как это граммотно реализовать. Выходило что ограничить мог не так и сильно, либо получал не те результаты..

Можетбыть кто знает какие способы по скоращению времени на перебор в данном случае? Или куда глядеть дальше по этой теме?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
05.09.2011, 03:57     Перебор значений double #21
Цитата Сообщение от Amell Посмотреть сообщение
Тобишь, метод половинного деления будет работать только если математически функция монотонная, я правильно понял?
Важнее количество смен знака. Функции не обязательно быть монотонной, но не должно быть больше одной смены знака.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
05.09.2011, 03:57     Перебор значений double #22
Цитата Сообщение от grizlik78 Посмотреть сообщение
потребуется очень быстрый вычислитель и очень много времени
ну это и так понятно. до меня не доходит просто как будет проверяться возвращаемое значение функции, очевидно что ее надо "выудить"... это наверное не в тот форум.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
05.09.2011, 04:00     Перебор значений double #23
alkagolik, ну насколько я понимаю задание — функцию можно вызывать с любыми аргументами, но нет возможности её дизассемблировать. Например программа выполняется на удалённом сервере, куда можно лишь отправить программу.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
05.09.2011, 04:02     Перебор значений double #24
то бишь возврат проверить можно... забыл имя грека, чей это алгоритм (деление пополам) напомни пожалуйста.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
05.09.2011, 04:07     Перебор значений double #25
Ну, в этом контексте мне только Апории Зенона с его Ахиллесом и черепахой вспоминаются. Но вообще-то про дихотомию мы уже третий десяток постов разговариваем
Amell
0 / 0 / 0
Регистрация: 05.09.2011
Сообщений: 13
05.09.2011, 04:08  [ТС]     Перебор значений double #26
Возврат можно провреить всегда. Т.е. дано полное право вызивать функцию d_Function из другой функуии - например double Search(); сколько угодно раз
Amell
0 / 0 / 0
Регистрация: 05.09.2011
Сообщений: 13
05.09.2011, 04:09  [ТС]     Перебор значений double #27
Возврат можно провреить всегда. Т.е. дано полное право вызивать функцию d_Function из другой функуии - например double Search(); сколько угодно раз
Amell
0 / 0 / 0
Регистрация: 05.09.2011
Сообщений: 13
05.09.2011, 04:11  [ТС]     Перебор значений double #28
извиняюсь, произошел сбой с Gateway... Итого прошлый пост запостился дважды.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
05.09.2011, 04:12     Перебор значений double #29
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну, в этом контексте мне только Апории Зенона с его Ахиллесом и черепахой вспоминаются
ну и не надо)) все равно сам найду, узнаю и запомню
Amell
0 / 0 / 0
Регистрация: 05.09.2011
Сообщений: 13
05.09.2011, 06:01  [ТС]     Перебор значений double #30
В ситуациях когда знак у функции за указанный промежуток меняется не один раз остается только перебор?

Добавлено через 43 минуты
Так же в условии сказано, есть только одно значение параметра при котором функция вернет 0, следовательно она меняет знак лишь однажды... Итого данный метод должен сработать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2011, 08:05     Перебор значений double
Еще ссылки по теме:

Почему перестает работать программа при замене double на long double? C++
C++ Перебор всех значений трёх булевых переменных
Почему мы пишем double x (double y)? а не через запятую double x,y C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.09.2011, 08:05     Перебор значений double #31
Если известно, что функция просто непрерывная и возвращает только знаки (>0, <0, =0), то все зависит от точки, в которой f(x)=0. Если она иррациональная, то ваши поиски могут быть бесплодными. Если же эта точка помещается в double, то если больше никакой информации об f(x) неизвестно, то самый простой способ это упомянутый участниками форума выше. Чтобы найти точное значение этой точки, возможно, придется много перебрать значений, а приближенное значение можно очень быстро найти.
Yandex
Объявления
05.09.2011, 08:05     Перебор значений double
Ответ Создать тему
Опции темы

Текущее время: 16:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru