Простейшая версия проблемы такова:
Symbolic x("x");
Symbolic y("y");
Symbolic a("a");
Symbolic ans;
a = 1.1;
ans = a ^ (x + y);
std::cout << ans;
По сути, это начинает бесконечный цикл рекурсии и приводит к переполнению стека.
Если a = 0 или a = 1, переполнение стека не происходит, потому что 0 ^ x = 0 и 1 ^ x = 1. Если a не установлено на постоянное значение, будет напечатано «a ^ (x + y)», потому что это не может быть упрощено. Создание целого числа (кроме 1 и 0) ничего не меняет.
Оптимально это выдает «(1.1) ^ (x + y)», потому что нет способа упростить это.
Мне интересно, если кто-то имел эту проблему раньше или знает, как обойти. Я пробовал поискать в Google, но этот сайт сделал невозможным поиск информации об ошибках переполнения стека с помощью Google.
Задача ещё не решена.