我想在不使用任何浮点运算的情况下计算某个整数的平方根。然而,问题是我不想丢弃输出的精度。也就是说,我不想要一个舍入的整数作为结果,我想要达到小数点值,至少要达到两位有效数字。举个例子:
sqrt(9) = 3
sqrt(10) = 3.16
sqrt(999999) = 999.99
我一直在考虑这个问题,但我并没有特别想出解决方案,搜索也没有帮助,因为大多数类似的问题只是类似的问题。
任何形式的输出都是可接受的,不是浮点数,而是准确地表示数据。最好是,我有两个整数,一个用于小数点前的部分,一个用于小数点后的部分。
我只使用伪代码/解释算法,如果编码C最好的话。感谢
答案 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 ++实现很有用(它还包括将分子除以分母转换为具有预定义浮点精度的数字字符串)。
请注意,不需要浮点运算(如给定链接所示)。