1// run 2 3// Copyright 2015 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7// WARNING: GENERATED FILE - DO NOT MODIFY MANUALLY! 8// (To generate, in go/types directory: go test -run=Hilbert -H=2 -out="h2.src") 9 10// This program tests arbitrary precision constant arithmetic 11// by generating the constant elements of a Hilbert matrix H, 12// its inverse I, and the product P = H*I. The product should 13// be the identity matrix. 14package main 15 16func main() { 17 if !ok { 18 print() 19 return 20 } 21} 22 23// Hilbert matrix, n = 2 24const ( 25 h0_0, h0_1 = 1.0 / (iota + 1), 1.0 / (iota + 2) 26 h1_0, h1_1 27) 28 29// Inverse Hilbert matrix 30const ( 31 i0_0 = +1 * b2_1 * b2_1 * b0_0 * b0_0 32 i0_1 = -2 * b2_0 * b3_1 * b1_0 * b1_0 33 34 i1_0 = -2 * b3_1 * b2_0 * b1_1 * b1_1 35 i1_1 = +3 * b3_0 * b3_0 * b2_1 * b2_1 36) 37 38// Product matrix 39const ( 40 p0_0 = h0_0*i0_0 + h0_1*i1_0 41 p0_1 = h0_0*i0_1 + h0_1*i1_1 42 43 p1_0 = h1_0*i0_0 + h1_1*i1_0 44 p1_1 = h1_0*i0_1 + h1_1*i1_1 45) 46 47// Verify that product is identity matrix 48const ok = p0_0 == 1 && p0_1 == 0 && 49 p1_0 == 0 && p1_1 == 1 && 50 true 51 52func print() { 53 println(p0_0, p0_1) 54 println(p1_0, p1_1) 55} 56 57// Binomials 58const ( 59 b0_0 = f0 / (f0 * f0) 60 61 b1_0 = f1 / (f0 * f1) 62 b1_1 = f1 / (f1 * f0) 63 64 b2_0 = f2 / (f0 * f2) 65 b2_1 = f2 / (f1 * f1) 66 b2_2 = f2 / (f2 * f0) 67 68 b3_0 = f3 / (f0 * f3) 69 b3_1 = f3 / (f1 * f2) 70 b3_2 = f3 / (f2 * f1) 71 b3_3 = f3 / (f3 * f0) 72) 73 74// Factorials 75const ( 76 f0 = 1 77 f1 = 1 78 f2 = f1 * 2 79 f3 = f2 * 3 80) 81