使用整数运算计算平方根

时间:2014-06-12 13:17:22

标签: c square-root

我想在不使用任何浮点运算的情况下计算某个整数的平方根。然而,问题是我不想丢弃输出的精度。也就是说,我不想要一个舍入的整数作为结果,我想要达到小数点值,至少要达到两位有效数字。举个例子:

sqrt(9) = 3
sqrt(10) = 3.16
sqrt(999999) = 999.99

我一直在考虑这个问题,但我并没有特别想出解决方案,搜索也没有帮助,因为大多数类似的问题只是类似的问题。

任何形式的输出都是可接受的,不是浮点数,而是准确地表示数据。最好是,我有两个整数,一个用于小数点前的部分,一个用于小数点后的部分。

我只使用伪代码/解释算法,如果编码C最好的话。感谢

1 个答案:

答案 0 :(得分:0)

您可以计算整数分子和整数分母,这样分母对分子的浮点除法将产生输入数的平方根。

但请注意,不存在平方根方法,因此自然数的结果是100%准确的,因为此数字的平方根可能是无理数。


以下是算法:

Function (input number, input num_of_iterations, output root):
    Set root.numerator   = number
    Set root.denominator = 1
    Run num_of_iterations:
        Set root = root-(root^2-number)/(root*2)

您可能会发现this C ++实现很有用(它还包括将分子除以分母转换为具有预定义浮点精度的数字字符串)。


请注意,不需要浮点运算(如给定链接所示)。