// $G $F.go && $L $F.$A && ./$A.out

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

func
pow10(pow int) float64 {
	if pow < 0 { return 1/pow10(-pow); }
	if pow > 0 { return pow10(pow-1)*10; }
	return 1;
}

func
close(da float64, ia, ib int64, pow int) bool {
	db := float64(ia) / float64(ib);
	db *= pow10(pow);

	if da == 0 || db == 0 {
		if da == 0 && db == 0 {
			return true;
		}
		return false;
	}

	de := (da-db) /da;
	if de < 0 {
		de = -de;
	}

	if de < 1.0e-14 {
		return true;
	}
	return false;
}

func
main() {

	if !close(0., 0, 1, 0) { print("0. is ", 0., "\n"); }
	if !close(+10., 10, 1, 0) { print("+10. is ", +10., "\n"); }
	if !close(-210., -210, 1, 0) { print("-210. is ", -210., "\n"); }

	if !close(.0, 0, 1, 0) { print(".0 is ", .0, "\n"); }
	if !close(+.01, 1, 100, 0) { print("+.01 is ", +.01, "\n"); }
	if !close(-.012, -12, 1000, 0) { print("-.012 is ", -.012, "\n"); }

	if !close(0.0, 0, 1, 0) { print("0.0 is ", 0.0, "\n"); }
	if !close(+10.01, 1001, 100, 0) { print("+10.01 is ", +10.01, "\n"); }
	if !close(-210.012, -210012, 1000, 0) { print("-210.012 is ", -210.012, "\n"); }

	if !close(0E+1, 0, 1, 0) { print("0E+1 is ", 0E+1, "\n"); }
	if !close(+10e2, 10, 1, 2) { print("+10e2 is ", +10e2, "\n"); }
	if !close(-210e3, -210, 1, 3) { print("-210e3 is ", -210e3, "\n"); }

	if !close(0E-1, 0, 1, 0) { print("0E-1 is ", 0E-1, "\n"); }
	if !close(+0e23, 0, 1, 1) { print("+0e23 is ", +0e23, "\n"); }
	if !close(-0e345, 0, 1, 1) { print("-0e345 is ", -0e345, "\n"); }

	if !close(0E1, 0, 1, 1) { print("0E1 is ", 0E1, "\n"); }
	if !close(+10e23, 10, 1, 23) { print("+10e23 is ", +10e23, "\n"); }
	if !close(-210e34, -210, 1, 34) { print("-210e34 is ", -210e34, "\n"); }

	if !close(0.E1, 0, 1, 1) { print("0.E1 is ", 0.E1, "\n"); }
	if !close(+10.e+2, 10, 1, 2) { print("+10.e+2 is ", +10.e+2, "\n"); }
	if !close(-210.e-3, -210, 1, -3) { print("-210.e-3 is ", -210.e-3, "\n"); }

	if !close(.0E1, 0, 1, 1) { print(".0E1 is ", .0E1, "\n"); }
	if !close(+.01e2, 1, 100, 2) { print("+.01e2 is ", +.01e2, "\n"); }
	if !close(-.012e3, -12, 1000, 3) { print("-.012e3 is ", -.012e3, "\n"); }

	if !close(0.0E1, 0, 1, 0) { print("0.0E1 is ", 0.0E1, "\n"); }
	if !close(+10.01e2, 1001, 100, 2) { print("+10.01e2 is ", +10.01e2, "\n"); }
	if !close(-210.012e3, -210012, 1000, 3) { print("-210.012e3 is ", -210.012e3, "\n"); }

	if !close(0.E+12, 0, 1, 0) { print("0.E+12 is ", 0.E+12, "\n"); }
	if !close(+10.e23, 10, 1, 23) { print("+10.e23 is ", +10.e23, "\n"); }
	if !close(-210.e33, -210, 1, 33) { print("-210.e33 is ", -210.e33, "\n"); }

	if !close(.0E-12, 0, 1, 0) { print(".0E-12 is ", .0E-12, "\n"); }
	if !close(+.01e23, 1, 100, 23) { print("+.01e23 is ", +.01e23, "\n"); }
	if !close(-.012e34, -12, 1000, 34) { print("-.012e34 is ", -.012e34, "\n"); }

	if !close(0.0E12, 0, 1, 12) { print("0.0E12 is ", 0.0E12, "\n"); }
	if !close(+10.01e23, 1001, 100, 23) { print("+10.01e23 is ", +10.01e23, "\n"); }
	if !close(-210.012e33, -210012, 1000, 33) { print("-210.012e33 is ", -210.012e33, "\n"); }

	if !close(0.E123, 0, 1, 123) { print("0.E123 is ", 0.E123, "\n"); }
	if !close(+10.e+23, 10, 1, 23) { print("+10.e+234 is ", +10.e+234, "\n"); }
	if !close(-210.e-35, -210, 1, -35) { print("-210.e-35 is ", -210.e-35, "\n"); }

	if !close(.0E123, 0, 1, 123) { print(".0E123 is ", .0E123, "\n"); }
	if !close(+.01e29, 1, 100, 29) { print("+.01e29 is ", +.01e29, "\n"); }
	if !close(-.012e29, -12, 1000, 29) { print("-.012e29 is ", -.012e29, "\n"); }

	if !close(0.0E123, 0, 1, 123) { print("0.0E123 is ", 0.0E123, "\n"); }
	if !close(+10.01e31, 1001, 100, 31) { print("+10.01e31 is ", +10.01e31, "\n"); }
	if !close(-210.012e19, -210012, 1000, 19) { print("-210.012e19 is ", -210.012e19, "\n"); }
}
