// task1 project main.go
package main
import (
"fmt"
"math/big"
//"os"
//"strconv"
)
//var b [64]big.Rat
func GFS(z [64]big.Rat, c big.Rat, y [6]uint, w [6]uint, count uint) {
var temp big.Rat
switch count {
case 0:
if y[0] == 1 && y[1] == 1 {
temp.Mul(&c, big.NewRat(14, 15))
w[1] = 1
GFS(z, temp, y, w, 1+count)
temp.Mul(&c, big.NewRat(1, 15))
w[1] = 0
GFS(z, temp, y, w, 1+count)
} else {
w[1] = y[1]
GFS(z, c, y, w, 1+count)
}
case 1:
if y[2] == 1 && y[3] == 1 {
temp.Mul(&c, big.NewRat(14, 15))
w[3] = 1
GFS(z, temp, y, w, 1+count)
temp.Mul(&c, big.NewRat(1, 15))
w[3] = 0
GFS(z, temp, y, w, 1+count)
} else {
w[3] = y[3]
GFS(z, c, y, w, 1+count)
}
case 2:
if y[4] == 1 && y[5] == 1 {
temp.Mul(&c, big.NewRat(14, 15))
w[5] = 1
GFS(z, temp, y, w, 1+count)
temp.Mul(&c, big.NewRat(1, 15))
w[5] = 0
GFS(z, temp, y, w, 1+count)
} else {
w[5] = y[5]
GFS(z, c, y, w, 1+count)
}
case 3:
var m uint
for i := uint(0); i < 6; i++ {
m += w[i] << i
}
//fmt.Printf(z[m].String())
temp.Mul(&c, big.NewRat(1, 63))
z[m].Add(&z[m], &temp)
default:
break
}
}
func main() {
var z [64]big.Rat
var y [6]uint
var w [6]uint
var c = *big.NewRat(1, 1)
for i := 1; i < 64; i++ {
z[i] = *big.NewRat(0, 1)
}
for i := uint(1); i < 64; i++ {
y[0] = i & 0x1
y[1] = i & 0x2 >> 1
y[2] = i & 0x4 >> 2
y[3] = i & 0x8 >> 3
y[4] = i & 0x10 >> 4
y[5] = i & 0x20 >> 5
w[0] = y[0]
w[2] = y[2]
w[4] = y[4]
GFS(z, c, y, w, 0)
//fmt.Println(y)
}
for i := 0; i < 64; i++ {
fmt.Printf(z[i].String())
fmt.Println()
}
}
Why Why the value of array Z[64] still are 0/1