例如,想象一个这样的函数:
int solveSomeEquation(int y)
{
y = (int x) * 2;
return x;
}
使用符号代数,编译器将确定 x = y / 2。更好的是,它会抱怨 int 不足以存储 y / 2 的结果。想象一下这个功能扩展到求解具有约束和/或边界条件的 ODE,并在需要时使用符号或数字方法(在运行时)进行集成。我,一方面,很想看到这样的事情:
int areaOfUnitSemiCircle()
{
auto semiCircleFunc = [](double x){ return abs((1 - x^2)^0.5); };
semiCircleFunc = (auto semiCircleIntegralFunc)'; // single quote means derivative
return semiCircleIntegralFunc(1) - semiCircleIntegralFunc(-1);
}
简化为:
int areaOfUnitSemiCircle()
{
return Pi/2;
}
此外,它不仅可以在函数内部局部简化表达式,还可以执行整个程序优化。它可以重新排列表达式以提高数值稳定性(减少浮点误差的影响),甚至可以通过使用不同的表示来完全消除它们。BigInt,IEEE1394 的四精度浮点数,由谓词定义的集合,分段函数的积分。可能负载可以做更多。
这样的事情是可能的,不是吗?我知道您可以使用 Mathematica 或 MatLab 的编程语言函数执行类似的操作,但它们被源代码调用。我希望它被编译器应用于源代码。(这些语言有这种东西吗?我不知道。)当我有借口时,我喜欢在工作中使用 Mathematica,但后来我在 C++ 中得到了看起来很神奇的函数,如果不引用外部函数就毫无意义数学笔记本。我希望能够成为使用一种语言、一种环境的数学家和程序员。这样的事情存在吗?