Какой алгоритм использует Excel для пересчета формул?

Представлены ли формулы в синтаксическом дереве, а затем пересчитаны с использованием шаблона проектирования, такого как шаблон "Посетитель"? Как бы вы воспроизвели процесс пересчета в коде?


person David Robbins    schedule 24.11.2008    source источник


Ответы (3)


Вероятно, как вы сказали, одно предположение состоит в том, что Excel создает набор AST, по одному для каждой независимой группы ячеек, где листья — это исходные статические данные, а узлы — это формулы.

Затем он вычисляет результат для каждого узла с помощью алгоритма обхода дерева post-order.

Вы должны учитывать отмену листа/узла, частичный пересчет и т.д. Если я не ошибаюсь, я где-то читал, что Excel может использовать многоядерные процессоры для параллельного пересчета листа.

person Gabriele D'Antona    schedule 24.11.2008

Resolver One — это электронная таблица, разработанная с использованием IronPython.

Его исходный код был выпущен как Dirigible Spreadsheet. Раньше была статья, в которой описывалось его общий алгоритм:

введите здесь описание изображения

person Esteban Küber    schedule 27.11.2008

Формулы, представленные в AST, затем пересчитываются с использованием шаблона проектирования, такого как шаблон «Посетитель»?

Вы думаете об переводчике, а не о посетителе. В то время как обход дерева с использованием посетителя может использоваться в сочетании с интерпретацией, использование интерпретатора здесь имеет больше смысла (отсюда и название). То, что это делает, в основном то, что написал friol, то есть проходит дерево в обратном порядке и выполняет функцию, связанную с каждым узлом.

person Konrad Rudolph    schedule 24.11.2008
comment
Спасибо - я видел шаблон посетителя, используемый для обхода AST, и подумал, что это самый распространенный метод. Я проверю шаблон интерпретатора, как вы предложили. - person David Robbins; 25.11.2008