平方根C ++的平方

时间:2014-10-07 16:45:21

标签: c++ fractions

我为我的c ++课做了一个混合数字计算器。我们将所有内容存储在一个带有整数,分子和分母的自定义混合数字类中。因此,在转换为混合数字之前,必须近似不合理的答案。我的问题是,如果我将2 ^(1/2)的输出平方,它将返回一个非常接近2而不是2的混合数字。我想知道有没有办法让(a ^(1 / n))^ n为所有积极的a返回a。 TIA。

2 个答案:

答案 0 :(得分:2)

我假设你明白二的平方根不是一个有理数。因此,不存在两个整数,其商的平方正好是两个。您有两个基本选项:

  1. 您可以将所有真正非常接近整数的结果精确舍入到该整数。在某些情况下,这会给出错误的答案。但是你应该已经接受了,你不能总是为每个可能的问题提供一个确切的答案,因为你把一些数字表示为理性的,不能用那种方式表示。

  2. 除了两个整数之外,您还可以向表示添加一些其他信息。例如,如果某个东西是将整数提升为幂的结果,则可以将其标记为这样。如果它稍后被取幂,您可以使用上述舍入,或者您可以恢复原始整数。

  3. 基本上,决定你想要的东西并编码。

答案 1 :(得分:0)

对于任何表达方式都是可能的,我们将有一个自动定理证明"。

但不幸的是,已经证明定理的证明不是MT可判定的问题。

您可以做的是提供常用表达式的一些符号表示(请注意,有理数是a/b的符号表示),例如a^bexp(a/b),{ {1}}等比表达式组合和算法简化着名的组合。

表达式简化后2 ^(2/2)将为2。

结果将是一个相当复杂的代码,不一定很快,仅适用于您提供"解决方案"的情况。但总有一种方法可以用一种你没有预测过的复杂的方式来表达。

此时,您必须接受有限表示的限制。理性或浮点无论是什么。