我为我的c ++课做了一个混合数字计算器。我们将所有内容存储在一个带有整数,分子和分母的自定义混合数字类中。因此,在转换为混合数字之前,必须近似不合理的答案。我的问题是,如果我将2 ^(1/2)的输出平方,它将返回一个非常接近2而不是2的混合数字。我想知道有没有办法让(a ^(1 / n))^ n为所有积极的a返回a。 TIA。
答案 0 :(得分:2)
我假设你明白二的平方根不是一个有理数。因此,不存在两个整数,其商的平方正好是两个。您有两个基本选项:
您可以将所有真正非常接近整数的结果精确舍入到该整数。在某些情况下,这会给出错误的答案。但是你应该已经接受了,你不能总是为每个可能的问题提供一个确切的答案,因为你把一些数字表示为理性的,不能用那种方式表示。
除了两个整数之外,您还可以向表示添加一些其他信息。例如,如果某个东西是将整数提升为幂的结果,则可以将其标记为这样。如果它稍后被取幂,您可以使用上述舍入,或者您可以恢复原始整数。
基本上,决定你想要的东西并编码。
答案 1 :(得分:0)
对于任何表达方式都是可能的,我们将有一个自动定理证明"。
但不幸的是,已经证明定理的证明不是MT可判定的问题。
您可以做的是提供常用表达式的一些符号表示(请注意,有理数是a/b
的符号表示),例如a^b
,exp(a/b)
,{ {1}}等比表达式组合和算法简化着名的组合。
表达式简化后2 ^(2/2)将为2。
结果将是一个相当复杂的代码,不一定很快,仅适用于您提供"解决方案"的情况。但总有一种方法可以用一种你没有预测过的复杂的方式来表达。
此时,您必须接受有限表示的限制。理性或浮点无论是什么。