vector: measure the fixed point rasterizer's accuracy.

When commit 8874bef1 changed ϕ from 10 to 9, this total diff grew from:
Total diff = 3051, n = 208, avg = 14.66827 out of 65535, or 0.02238%.
to:
Total diff = 6412, n = 208, avg = 30.82692 out of 65535, or 0.04704%.

Also fix a comment typo.

Change-Id: I91cc861a3d3ab282b5431cfb141fb010fd1f8d14
Reviewed-on: https://go-review.googlesource.com/32771
Reviewed-by: David Crawshaw <crawshaw@golang.org>
diff --git a/vector/acc_test.go b/vector/acc_test.go
index 0e2ae58..d80f765 100644
--- a/vector/acc_test.go
+++ b/vector/acc_test.go
@@ -612,3 +612,40 @@
 	0x00d4, 0xa6a1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd54d, 0x8399, 0xffff, 0xffff, 0x764b,
 	0x0000, 0x001b, 0x4ffc, 0xbb4a, 0xe3f5, 0xeee3, 0xbd4c, 0x7e42, 0x0900, 0x1b0c, 0xb6fc, 0xb6fc, 0x7e04,
 }
+
+// TestFixedFloatingCloseness compares the closeness of the fixed point and
+// floating point rasterizer.
+func TestFixedFloatingCloseness(t *testing.T) {
+	if len(fxMask16) != len(flMask16) {
+		t.Fatalf("len(fxMask16) != len(flMask16)")
+	}
+
+	total := uint32(0)
+	for i := range fxMask16 {
+		a := fxMask16[i]
+		b := flMask16[i]
+		if a > b {
+			total += a - b
+		} else {
+			total += b - a
+		}
+	}
+	n := len(fxMask16)
+
+	// This log message is useful when changing the fixed point rasterizer
+	// implementation, such as by changing ϕ. Assuming that the floating point
+	// rasterizer is accurate, the average difference is a measure of how
+	// inaccurate the (faster) fixed point rasterizer is.
+	//
+	// Smaller is better.
+	percent := float64(total*100) / float64(n*65535)
+	t.Logf("Comparing closeness of the fixed point and floating point rasterizer.\n"+
+		"Specifically, the elements of fxMask16 and flMask16.\n"+
+		"Total diff = %d, n = %d, avg = %.5f out of 65535, or %.5f%%.\n",
+		total, n, float64(total)/float64(n), percent)
+
+	const thresholdPercent = 1.0
+	if percent > thresholdPercent {
+		t.Errorf("average difference: got %.5f%%, want <= %.5f%%", percent, thresholdPercent)
+	}
+}
diff --git a/vector/raster_fixed.go b/vector/raster_fixed.go
index ccfa342..5b0fe7a 100644
--- a/vector/raster_fixed.go
+++ b/vector/raster_fixed.go
@@ -127,8 +127,8 @@
 
 			if i := clamp(x0i, width); i < uint(len(buf)) {
 				// In ideal math: buf[i] += uint32(d * a0)
-				D := oneMinusX0fSquared // D ranges up to ±1<<(1*ϕ).
-				D *= d                  // D ranges up to ±1<<(2*ϕ).
+				D := oneMinusX0fSquared // D ranges up to ±1<<(2*ϕ).
+				D *= d                  // D ranges up to ±1<<(3*ϕ).
 				D /= twoOverS
 				buf[i] += uint32(D)
 			}