Страницы: 1
RSS
Почему ОКРГЛВВЕРХ работает неточно?
 
Доброго времени суток уважаемые форумчане. Возникла следующая проблема:

Во вложенном файле есть немаленькая таблица и стоит вопрос о необходимости интерполяции значений из нее. Исчеслительные формулы находятся справа от таблицы в столбцах BK:BP.

Так вот, в полях подсвеченных зеленым вводится исходные значения для интерполяции. Потом в синих ячейках через функции ОКРГУЛВВЕРХ И ОКРУГЛВНИЗ находим ближайшие исходные табличные значения. В оранжевых ячейках через функции ИНДЕКС и ПОИСКПОЗ находим соответствующие табличные значение. В желтых ячейках проводим интерполяцию по горизонтали, в серых - по вертикали и получаем нужное нам проинтерполированное значение.

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

Что интересно, алогичные алгоритмы, но на меньших массивах работали исправно.

Буду очень благодарен за помощь.

P.S. excel 2016 Версия 1808 (сборка 10730.20344)
Изменено: t_lysak - 13.06.2019 15:51:33
 
Вы знаете о понятии абзацев? Отредактируйте сообщение.

О примере
Пример - не рабочий файл.  Не нужны в примере лишние данные, они отвлекают. Зачем показывать вычисление интерполяции, если ошибка возникает еще до этого? Зачем второй лист? Зачем стольо столбцов с данными? Без них не воспроизвести проблему?
Лишнее отвлекает. на него теряется время (а модератору - еще и сообщение писать :) ). Упростите пример. Это, возможно, ускорит помощь.

Пока что похоже на глюк функции. Если еще раз округлить - работает.
=ОКРУГЛ(ОКРУГЛВВЕРХ(BK3;1);1)
 
Почему так - сказать не могу, и правда если ввести четко 97.7 то находит, а при  округленном нет, но я б ваще отказался от поиска, если конечно это не просто пример, у вас фиксированный период, можно просто так
=INDEX($A$1:$BI$102;2+($A$2-$BL3)/0,1;2+($B$1-BM$2)/0,1)
ну или
=INDEX($A$1:$BI$102;2+($A$2-$BL3)*10;2+($B$1-BM$2)*10)
Изменено: БМВ - 12.06.2019 13:26:16
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал: Почему так - сказать не могу
оно и понятно - пора на моря собираться :)
 
Огромное спасибо за помощь с повторным округлением. Прошу прощения за некорректно оформленный пост. Это мой первый опыт общения на форумах за очень долгое время.
А большой массив я оставил, потому что на маленьких таблицах все работало нормально. Думал, может причина как раз кроется в том, что таблица большая.
 
Исправьте замечания. Тема останется. Помогите тем, кто придет после Вас.

Округление - костыль. Пока непонятна причина.
 
Цитата
vikttur написал:
Пока что похоже на глюк функции
Похоже, функция округления здесь ни при чем. Если ввести, например
Код
=22,1+0,1
, то также будет ошибка.
 
Мы уже обсуждали это.
Владимир
 
sokol92, Владимир, и да и нет. В данном случае  простое сравнение показывает что значения равны. но MATCH не находит. А то что происходит при повторном округлении , тем долее странно,  типа два раза округлить и все ок.
По вопросам из тем форума, личку не читаю.
 
Здравствуйте, Михаил! Напоминаю, что Вы работаете с рациональными аппроксимациями (знаменатель - степень двойки) нецелых чисел, MATCH ищет точное совпадение. В случае арифметических операций с нецелыми числами (кроме дробей со знаменателем, равным степени 2) никогда нельзя поручиться за последний разряд.
Функции округления просто уменьшают погрешность аппроксимации до минимально возможного значения.
Изменено: sokol92 - 12.06.2019 19:56:12
Владимир
 
sokol92, Владимир,  степень двойки как для ROUND, так и для ROUNDUP должна быть релевантна. Почему =ROUND(BK2+0,05;1) проблему, которая присутствует в случае =ROUNDUP(BK2;1)
Изменено: БМВ - 12.06.2019 21:30:07
По вопросам из тем форума, личку не читаю.
 
Михаил, повторюсь, что в приближенных вычислениях при аппроксимации бесконечных периодических дробей за последний разряд никогда нельзя поручиться. Полагаться на то, что в компьютерных вычислениях (в двоичной системе счисления)
22.1+0.1=22.2
как в #7 - ошибка.
С целыми числами (в известном диапазоне) таких "казусов" не случается.
Изменено: sokol92 - 12.06.2019 21:24:49
Владимир
 
О приближенных вычислениях. Похоже на правду... Но как объяснить, что при повторном округлении ошибки нет? Значение в ПОИСКПОЗ не знает, что в ячейке формула, функция берет уже готовенькое значение. А оно, готовенькое. что при одинарном, что при двойном округлении одинаково (внешне - не верь глазам своим?) и равно константе, введенной вручную.

Цитата
БМВ написал: ROUNDГЗ
А говорил, офис нерусский.  Прокололся, отпускник )
 
А я даже внимания не обратил, исправил в уме автоматически, как Яндекс. Тоже пора отдыхать.
Владимир
Страницы: 1
Наверх