| // run | |
| // Copyright 2015 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. | |
| // WARNING: GENERATED FILE - DO NOT MODIFY MANUALLY! | |
| // (To generate, in go/types directory: go test -run=Hilbert -H=2 -out="h2.src") | |
| // This program tests arbitrary precision constant arithmetic | |
| // by generating the constant elements of a Hilbert matrix H, | |
| // its inverse I, and the product P = H*I. The product should | |
| // be the identity matrix. | |
| package main | |
| func main() { | |
| if !ok { | |
| print() | |
| return | |
| } | |
| } | |
| // Hilbert matrix, n = 2 | |
| const ( | |
| h0_0, h0_1 = 1.0 / (iota + 1), 1.0 / (iota + 2) | |
| h1_0, h1_1 | |
| ) | |
| // Inverse Hilbert matrix | |
| const ( | |
| i0_0 = +1 * b2_1 * b2_1 * b0_0 * b0_0 | |
| i0_1 = -2 * b2_0 * b3_1 * b1_0 * b1_0 | |
| i1_0 = -2 * b3_1 * b2_0 * b1_1 * b1_1 | |
| i1_1 = +3 * b3_0 * b3_0 * b2_1 * b2_1 | |
| ) | |
| // Product matrix | |
| const ( | |
| p0_0 = h0_0*i0_0 + h0_1*i1_0 | |
| p0_1 = h0_0*i0_1 + h0_1*i1_1 | |
| p1_0 = h1_0*i0_0 + h1_1*i1_0 | |
| p1_1 = h1_0*i0_1 + h1_1*i1_1 | |
| ) | |
| // Verify that product is identity matrix | |
| const ok = p0_0 == 1 && p0_1 == 0 && | |
| p1_0 == 0 && p1_1 == 1 && | |
| true | |
| func print() { | |
| println(p0_0, p0_1) | |
| println(p1_0, p1_1) | |
| } | |
| // Binomials | |
| const ( | |
| b0_0 = f0 / (f0 * f0) | |
| b1_0 = f1 / (f0 * f1) | |
| b1_1 = f1 / (f1 * f0) | |
| b2_0 = f2 / (f0 * f2) | |
| b2_1 = f2 / (f1 * f1) | |
| b2_2 = f2 / (f2 * f0) | |
| b3_0 = f3 / (f0 * f3) | |
| b3_1 = f3 / (f1 * f2) | |
| b3_2 = f3 / (f2 * f1) | |
| b3_3 = f3 / (f3 * f0) | |
| ) | |
| // Factorials | |
| const ( | |
| f0 = 1 | |
| f1 = 1 | |
| f2 = f1 * 2 | |
| f3 = f2 * 3 | |
| ) |