]> Cypherpunks repositories - gostls13.git/commitdiff
image/jpeg: initialize dct_test constants at compile time
authorNigel Tao <nigeltao@golang.org>
Sun, 3 Nov 2024 12:21:45 +0000 (23:21 +1100)
committerNigel Tao <nigeltao@golang.org>
Wed, 6 Nov 2024 21:57:39 +0000 (21:57 +0000)
Doing so is slightly more accurate than calculating at run time (because
of float64 rounding errors): https://go.dev/play/p/hrOzHDLjd5K

Having these more accurate values isn't necessary for tests to pass, but
it's helpful if doing printf-debugging or stepping through the code.

Change-Id: I07a65678936e4db05b11f9d8d952b32b2acd51a8
Reviewed-on: https://go-review.googlesource.com/c/go/+/624716
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Nigel Tao <nigeltao@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/image/jpeg/dct_test.go

index ed5b73d562cbdb9b7e3df2fb8800cc2fa55aa9d7..11819db86eed14027aefc6eae7b57258588c8adc 100644 (file)
@@ -112,12 +112,42 @@ func alpha(i int) float64 {
        return math.Sqrt2
 }
 
-var cosines [32]float64 // cosines[k] = cos(π/2 * k/8)
+var cosines = [32]float64{
+       +1.0000000000000000000000000000000000000000000000000000000000000000, // cos(π/16 *  0)
+       +0.9807852804032304491261822361342390369739337308933360950029160885, // cos(π/16 *  1)
+       +0.9238795325112867561281831893967882868224166258636424861150977312, // cos(π/16 *  2)
+       +0.8314696123025452370787883776179057567385608119872499634461245902, // cos(π/16 *  3)
+       +0.7071067811865475244008443621048490392848359376884740365883398689, // cos(π/16 *  4)
+       +0.5555702330196022247428308139485328743749371907548040459241535282, // cos(π/16 *  5)
+       +0.3826834323650897717284599840303988667613445624856270414338006356, // cos(π/16 *  6)
+       +0.1950903220161282678482848684770222409276916177519548077545020894, // cos(π/16 *  7)
 
-func init() {
-       for k := range cosines {
-               cosines[k] = math.Cos(math.Pi * float64(k) / 16)
-       }
+       -0.0000000000000000000000000000000000000000000000000000000000000000, // cos(π/16 *  8)
+       -0.1950903220161282678482848684770222409276916177519548077545020894, // cos(π/16 *  9)
+       -0.3826834323650897717284599840303988667613445624856270414338006356, // cos(π/16 * 10)
+       -0.5555702330196022247428308139485328743749371907548040459241535282, // cos(π/16 * 11)
+       -0.7071067811865475244008443621048490392848359376884740365883398689, // cos(π/16 * 12)
+       -0.8314696123025452370787883776179057567385608119872499634461245902, // cos(π/16 * 13)
+       -0.9238795325112867561281831893967882868224166258636424861150977312, // cos(π/16 * 14)
+       -0.9807852804032304491261822361342390369739337308933360950029160885, // cos(π/16 * 15)
+
+       -1.0000000000000000000000000000000000000000000000000000000000000000, // cos(π/16 * 16)
+       -0.9807852804032304491261822361342390369739337308933360950029160885, // cos(π/16 * 17)
+       -0.9238795325112867561281831893967882868224166258636424861150977312, // cos(π/16 * 18)
+       -0.8314696123025452370787883776179057567385608119872499634461245902, // cos(π/16 * 19)
+       -0.7071067811865475244008443621048490392848359376884740365883398689, // cos(π/16 * 20)
+       -0.5555702330196022247428308139485328743749371907548040459241535282, // cos(π/16 * 21)
+       -0.3826834323650897717284599840303988667613445624856270414338006356, // cos(π/16 * 22)
+       -0.1950903220161282678482848684770222409276916177519548077545020894, // cos(π/16 * 23)
+
+       +0.0000000000000000000000000000000000000000000000000000000000000000, // cos(π/16 * 24)
+       +0.1950903220161282678482848684770222409276916177519548077545020894, // cos(π/16 * 25)
+       +0.3826834323650897717284599840303988667613445624856270414338006356, // cos(π/16 * 26)
+       +0.5555702330196022247428308139485328743749371907548040459241535282, // cos(π/16 * 27)
+       +0.7071067811865475244008443621048490392848359376884740365883398689, // cos(π/16 * 28)
+       +0.8314696123025452370787883776179057567385608119872499634461245902, // cos(π/16 * 29)
+       +0.9238795325112867561281831893967882868224166258636424861150977312, // cos(π/16 * 30)
+       +0.9807852804032304491261822361342390369739337308933360950029160885, // cos(π/16 * 31)
 }
 
 // slowFDCT performs the 8*8 2-dimensional forward discrete cosine transform: