Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 简化GiNaC表达式_C++_Symbolic Math_Ginac - Fatal编程技术网

C++ 简化GiNaC表达式

C++ 简化GiNaC表达式,c++,symbolic-math,ginac,C++,Symbolic Math,Ginac,我正在尝试做一些非常简单的事情: void断言(bool x){ 如果(!x) 抛出运行时_错误(“断言错误”); } #包括 int main(int argc,char*argv[]){ 断言(sqrt(ex(32))==4*sqrt(ex(2));//引发运行时错误 } 我想简化sqrt(32),这样它就等于4*sqrt(2)。当然,从数学的角度来看,情况确实如此,但基纳克并没有“意识到”这一点。文档中没有提到这些简化,我真的不知道这是否可能…假设sqrt返回一个浮点数,那么你不应该用=

我正在尝试做一些非常简单的事情:

void断言(bool x){
如果(!x)
抛出运行时_错误(“断言错误”);
}
#包括
int main(int argc,char*argv[]){
断言(sqrt(ex(32))==4*sqrt(ex(2));//引发运行时错误
}

我想简化
sqrt(32)
,这样它就等于
4*sqrt(2)
。当然,从数学的角度来看,情况确实如此,但基纳克并没有“意识到”这一点。文档中没有提到这些简化,我真的不知道这是否可能…

假设
sqrt
返回一个浮点数,那么你不应该用
=
运算符比较两个浮点数,因为由于计算机中浮点数的存储方式,它们只能处理有限的精度。阅读Internet@AlexLarionov我忘了添加一些东西;
sqrt
函数接受
ex
对象作为其参数,它们是符号表达式。您是否尝试过
ex(32)=pow(4*sqrt(ex(2)),2)
?看看这是否有效?只是好奇ginac是否能处理好这件事;它并没有解决简化
sqrt(ex(32))
@cigien的问题,因为某些原因它是有效的。。。rhs表达式的计算结果直接为
ex(32)
。我猜
pow
就是为了处理这个问题而编写的,但是
sqrt
的计算结果并不是您所期望的。哪种方法有意义,可能有多种方法可以简化
sqrt
。请注意,我只是在这里猜测,我以前从未与ginac合作过,而且似乎没有太多教程或任何东西。假设
sqrt
返回一个浮点数,那么您不应该用
=
运算符比较两个浮点数,因为由于计算机中浮点数的存储方式,它们只能处理有限的精度。阅读Internet@AlexLarionov我忘了添加一些东西;
sqrt
函数接受
ex
对象作为其参数,它们是符号表达式。您是否尝试过
ex(32)=pow(4*sqrt(ex(2)),2)
?看看这是否有效?只是好奇ginac是否能处理好这件事;它并没有解决简化
sqrt(ex(32))
@cigien的问题,因为某些原因它是有效的。。。rhs表达式的计算结果直接为
ex(32)
。我猜
pow
就是为了处理这个问题而编写的,但是
sqrt
的计算结果并不是您所期望的。哪种方法有意义,可能有多种方法可以简化
sqrt
。请注意,我只是在这里猜测,我以前从未与ginac合作过,而且似乎没有太多教程或其他内容。
void assert(bool x) {
    if (!x)
        throw runtime_error("Assertion error");
}

#include <ginac/ginac.h>

int main(int argc, char *argv[]) {
    assert(sqrt(ex(32)) == 4 * sqrt(ex(2))); // Raises runtime_error
}