From 9088883cf4a5181cf796c968bbce5a5bc3edc7ab Mon Sep 17 00:00:00 2001 From: Nigel Tao Date: Sun, 3 Nov 2024 23:21:45 +1100 Subject: [PATCH] image/jpeg: initialize dct_test constants at compile time 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 Reviewed-by: Dmitri Shuralyov Reviewed-by: Nigel Tao LUCI-TryBot-Result: Go LUCI --- src/image/jpeg/dct_test.go | 40 +++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/src/image/jpeg/dct_test.go b/src/image/jpeg/dct_test.go index ed5b73d562..11819db86e 100644 --- a/src/image/jpeg/dct_test.go +++ b/src/image/jpeg/dct_test.go @@ -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: -- 2.48.1