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 <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>
This commit is contained in:
Nigel Tao 2024-11-03 23:21:45 +11:00
parent eb29beb0ad
commit 9088883cf4
1 changed files with 35 additions and 5 deletions

View 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: