Hello Andrey!
08 Aug 06 05:51, you wrote to me:
AM>> if((x&0xfff0) == 0) return(t1[x]); AM>> if((x&0xffe0) == 0){ AM>> Итого получается 12 сегментов по 17 слов, что меньше, чем 512 AM>> байт. AA> Сколько тут массивов и каких они размеров?
12 массивов по 16 слов. Это в предположении о том, что функция изменяется быстро при малом аргументе и медленно при большом. Я
_HЕ_ знаю точного вида функции. Итого: меньше 512 байт. AA> Зачем нужны эти бесконечные сравнения в старшОй части адреса? Затем, что от 0 до 15 результат просто берется из таблицы, а дальше делается линейная экстраполяция. AA> Какая получается в итоге в данном случае точность? Равная полученному из таблицы значению минус расчетное значение, вычисленное аналитически. Поскольку функцию я не знаю, то и про точность говорить не могу. AA> А в "и так далее" у тебя в младшОм адресе будет до 16 сравнений? Двенадцать. Хотя, при желании, на сравнениях можно и поэкономить. AM>> то вполне достаточно искать значение аргумента t[i] <= arg && arg AM>> < t[i+1]. Два байта на результат. AA> Так сколько у тебя превычесленных точек всё же? Вот в ЭТОМ случае придется иметь 4096 (или сколько там возможных значений функции) предвычисленных точек и делать до 16 сравнений двоичным поиском.
Anatoly