Lester> да, и не сомневаюсь, что Сергей тоже - иначе не получить высокое быстродействие
Оно подходит для всего, кроме подстановок. Тут появляется интерпретирующий элемент. Кстати, изначальное условие точности (не 100 циферок, а того, сколько значащих цифр и правила вычисления точности) сильно усложняют жизнь, т.к. это не просто место в памяти, а целый объект. Что сильно замедляет дело и уже промежуточный код не так сильно помогает.
Lester> я все выражения привожу к обратной польской нотации и храню как одну сущность - стек операндов и операторов, операнд может быть как число так и переменная, если переменная - то она может запоминать свой индекс в глобальном списке переменных( уже на этапе выполнения промежуточного кода - когда список переменных заполнен ), и когда необходимо вычислить выражение во второй( и последующие разы ) поиска по имени уже не будет, а заодно и разбора выражения - оно уже приведено к удобной форме
А как тогда будет работать код
code text
{
a=101E0B2;
b=202E0B3;
c[a]dfl[b]kj[a][b]=15
}
Ты заведёшь столько индексов? А как будешь представлять неплотную матрицу (в данном случае неплотный 4-х местный массив)? Хохма-то в том, что это не массив в определении Татарина, а именно новое имя. И таких квадратных скобочек может быть лимон. Да ещё и, согласно примеру, замена происходит по видимому написанию, а не по величине значения и приведения её к десятичной системе. Обрати внимание, что
а имеет значение в десятичной системе, а имя должно быть образовано как c101dfl202kj101202 и эта переменная получает значение 15 с точностью две знаковые цифры. Обрати внимание, что 15.00 и 15.0 разные величины — как указано в спецификации.