anchor.diff:              |]
   
           let QChrom =
  -            zigZag [|
  +            izigZag [|
                   0x03; 0x03;0x03; 0x05; 0x04; 0x05; 0x09; 0x06 
                   0x06; 0x09;0x0D; 0x0B; 0x09; 0x0B; 0x0D; 0x0F 
                   0x0E; 0x0E;0x0E; 0x0E; 0x0F; 0x0F; 0x0C; 0x0C 
  
positive.code:             inverseZigZagOrder |> Array.map (fun i -> block.[i])
  
          let zigZag (block : 'a[]) =
              zigZagOrder |> Array.map (fun i -> block.[i])
  
          let ycbcr =
              let mat = 
                  M34d(
                       0.299,       0.587,      0.114,     0.0,
                      -0.168736,   -0.331264,   0.5,       0.5,
                       0.5,        -0.418688,  -0.081312,  0.5
                  )
  
              fun (c : V3d[]) ->
                  c |> Array.map mat.TransformPos
  
          let dct (block : V3d[]) =
              Array.init 64 (fun i ->
                  let x = i % 8
                  let y = i / 8
                  let cxy = if x = y then 0.5 else 1.0
  
                  let mutable sum = V3d.Zero
                  for m in 0 .. 7 do
                      for n in 0 .. 7 do
                          sum <- sum + block.[m + 8*n] * cos ((2.0 * float m + 1.0) * float x * Constant.Pi / 16.0) *  cos ((2.0 * float n + 1.0) * float y * Constant.Pi / 16.0)
                  
                  0.25 * cxy * sum
              )
  
          let printMat8 (arr : 'a[]) =
  
negative.code:             end
  
          let QLum =
              izigZag [|
                  0x02; 0x02; 0x02; 0x02; 0x02; 0x02; 0x02; 0x02 
                  0x02; 0x02; 0x03; 0x02; 0x02; 0x02; 0x03; 0x04 
                  0x03; 0x02; 0x02; 0x03; 0x04; 0x05; 0x04; 0x04 
  