Отслеживание недостающих данных при оценке expr с помощью GiNaC
У меня есть фрагмент кода, который получает табличные данные и выражения GiNaC от пользователя и оценивает результат. В таблице могут отсутствовать данные. Я хочу иметь возможность определять, когда эти отсутствующие данные делают невозможным оценку конкретного выражения: это может быть не всегда так, если столбец, в котором отсутствуют данные, не используется в конкретном выражении.
Пример данных:
#x y z
0. 0. 0.
1. 0. 1.
3. 4. nan
nan 1. 1.
Примеры выражений:
R=\sqrt{x**2+y**2}
Z=z
Пример желаемого результата:
#R Z
0. 0.
1. 0.
5. nan
nan 1.
Пока я заменял отсутствующие данные на
numeric_limits<double>::max()
во время обработки GiNaC, но, конечно, обратно заменяя
na
работает только в том случае, если значение никак не изменяется (как для
z
значение здесь), и поэтому эта опция приводит к ложному значению
R
в 3-й строке в примере.
Я вижу 2 варианта:
- Если я смогу получить список символов, используемых в выражениях для
R
иZ
тогда я могу заменить вычисленное значение этих выражений наnan
всякий раз, когда любое из значений на входеnan
для этих, - Если переменным GiNaC могут быть присвоены нечисловые значения, я могу определить, что результат оценки не является числовым, и заменить его на
nan
.
Я не нашел способа сделать то же самое в документации GiNaC, и я открыт для любых предложений по решению этой проблемы.