# Newton's Square Root Method

A very simple implementation for Newton's square root approximation method.

It isn't foolproof (as in I haven't fully tested it), but it seems to work.

Initial guess calculation adapted from here.

import cpp.Lib; /** * A square root approximator. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * @author lemon42 */ class SquareRoot { static function main() { var x:Float = 123456789; Sys.println("Square root of " + x + ": " + newton(x)); } static function average(a:Float, b:Float):Float { return (a + b) / 2.0; } static function improve(guess:Float, x:Float):Float { return average(guess, x / guess); } static function newton(x:Float) { var guess:Float = x; //Calculate inital guess var val = 0; while (guess >= 100) { guess /= 10; val++; } if (guess < 10) { guess = 2 * Math.pow(10, Math.floor(val / 2)); } else { guess = 6 * Math.pow(10, Math.floor(val / 2)); } //Start improving estimation while (Math.abs(guess * guess - x) >= 0.0001) guess = improve(guess, x); return guess; } }

Example output:

Square root of 123456789: 11111.11106

version #19929, modified 2014-02-06 01:31:13 by lemon42