test_only.c overhaul

  - always print a curve per channel
  - Linear -> Identity
  - try to approximate skcms_TransferFunction with skcms_TF13
  - print all curve floats out at %.6g
  - get rid of for_unit_test

Change-Id: I8e7c7a8beba161594b06f8d1cecb43c22e7ef3f6
Reviewed-on: https://skia-review.googlesource.com/121488
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/iccdump.c b/iccdump.c
index ae678d0..aa69904 100644
--- a/iccdump.c
+++ b/iccdump.c
@@ -393,7 +393,7 @@
         fatal("Unable to parse ICC profile");
     }
 
-    dump_profile(&profile, stdout, false);
+    dump_profile(&profile, stdout);
 
     if (desmos) {
         if (profile.has_trc) {
diff --git a/profiles/color.org/Lower_Left.icc.txt b/profiles/color.org/Lower_Left.icc.txt
index 70b17b2..a48a2cb 100644
--- a/profiles/color.org/Lower_Left.icc.txt
+++ b/profiles/color.org/Lower_Left.icc.txt
@@ -16,7 +16,12 @@
  'gXYZ' : 'XYZ ' :     20 : 492
  'bXYZ' : 'XYZ ' :     20 : 512
 
- TRC : 2.19921875, 1, 0, 0, 0, 0, 0
+rTRC : 2.19922, 1, 0, 0, 0, 0, 0
+  ~= : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
+gTRC : 2.19922, 1, 0, 0, 0, 0, 0
+  ~= : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
+bTRC : 2.19922, 1, 0, 0, 0, 0, 0
+  ~= : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
  XYZ : | 0.385116577 0.143051147 0.436035156 |
        | 0.716903687 0.060607910 0.222488403 |
        | 0.097061157 0.713912964 0.013916016 |
diff --git a/profiles/color.org/Lower_Right.icc.txt b/profiles/color.org/Lower_Right.icc.txt
index e01c931..d5eb25c 100644
--- a/profiles/color.org/Lower_Right.icc.txt
+++ b/profiles/color.org/Lower_Right.icc.txt
@@ -16,7 +16,12 @@
  'gXYZ' : 'XYZ ' :     20 : 520
  'bXYZ' : 'XYZ ' :     20 : 540
 
- TRC : 2.19921875, 1, 0, 0, 0, 0, 0
+rTRC : 2.19922, 1, 0, 0, 0, 0, 0
+  ~= : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
+gTRC : 2.19922, 1, 0, 0, 0, 0, 0
+  ~= : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
+bTRC : 2.19922, 1, 0, 0, 0, 0, 0
+  ~= : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
  XYZ : | 0.609741211 0.205276489 0.149185181 |
        | 0.311111450 0.625671387 0.063217163 |
        | 0.019470215 0.060867310 0.744567871 |
diff --git a/profiles/color.org/Upper_Left.icc.txt b/profiles/color.org/Upper_Left.icc.txt
index fa04c9a..eb0cb7b 100644
--- a/profiles/color.org/Upper_Left.icc.txt
+++ b/profiles/color.org/Upper_Left.icc.txt
@@ -20,18 +20,18 @@
  A2B : "M", Matrix, "B"
  "M" : 3 inputs
   M0 : 16-bit table with 256 entries
-  ~= : 2.492x^3 + -2.858x^2 + 1.366x (Max error: 0.01908)
+  ~= : 2.49204x^3 + -2.85849x^2 + 1.36644x (Max error: 0.0190758)
   M1 : 16-bit table with 256 entries
-  ~= : 2.492x^3 + -2.858x^2 + 1.366x (Max error: 0.01908)
+  ~= : 2.49204x^3 + -2.85849x^2 + 1.36644x (Max error: 0.0190758)
   M2 : 16-bit table with 256 entries
-  ~= : 2.492x^3 + -2.858x^2 + 1.366x (Max error: 0.01908)
+  ~= : 2.49204x^3 + -2.85849x^2 + 1.36644x (Max error: 0.0190758)
 Mtrx : | 0.959396958 0.847338140 0.314814538 -0.503105104 |
        | 0.489433438 1.577521086 0.133390293 -0.521812081 |
        | 0.030578148 0.213589266 1.570868373 -0.430443883 |
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	003012 e8ff0c 335505 00000c 000032 5a3300 2d9d18
 	8c3b0f 000000 884609 dcd000 274100 0c230c 3510c0
diff --git a/profiles/color.org/Upper_Right.icc.txt b/profiles/color.org/Upper_Right.icc.txt
index d153e1b..b17eb1d 100644
--- a/profiles/color.org/Upper_Right.icc.txt
+++ b/profiles/color.org/Upper_Right.icc.txt
@@ -16,24 +16,24 @@
 
  A2B : "A", CLUT, "M", Matrix, "B"
  "A" : 3 inputs
-  A0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  A0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 CLUT : 2 x 2 x 2 (16 bpp)
  "M" : 3 inputs
   M0 : 16-bit table with 256 entries
-  ~= : 2.099x^3 + -1.99x^2 + 0.8913x (Max error: 0.01818)
+  ~= : 2.09874x^3 + -1.99004x^2 + 0.891296x (Max error: 0.0181844)
   M1 : 16-bit table with 256 entries
-  ~= : 2.099x^3 + -1.99x^2 + 0.8913x (Max error: 0.01818)
+  ~= : 2.09874x^3 + -1.99004x^2 + 0.891296x (Max error: 0.0181844)
   M2 : 16-bit table with 256 entries
-  ~= : 2.099x^3 + -1.99x^2 + 0.8913x (Max error: 0.01818)
+  ~= : 2.09874x^3 + -1.99004x^2 + 0.891296x (Max error: 0.0181844)
 Mtrx : | 2.202053785 1.944855571 0.722553670 -0.733356714 |
        | 1.123395920 3.620794296 0.306147665 -0.760608494 |
        | 0.070189357 0.490257412 3.605535746 -0.627431810 |
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	050217 c9c1ff 434d9d 273100 312b00 a1ff8a 0d054b
 	d3f938 2a480b bfe26d edffff 6592a8 0b091c a5670c
diff --git a/profiles/color.org/sRGB2014.icc.txt b/profiles/color.org/sRGB2014.icc.txt
index 7e889e2..f28aa1d 100644
--- a/profiles/color.org/sRGB2014.icc.txt
+++ b/profiles/color.org/sRGB2014.icc.txt
@@ -23,14 +23,14 @@
  'chad' : 'sf32' :     44 : 2980
 
 rTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
 gTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
 bTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
  XYZ : | 0.436065674 0.385147095 0.143066406 |
        | 0.222488403 0.716873169 0.060607910 |
        | 0.013916016 0.097076416 0.714096069 |
diff --git a/profiles/color.org/sRGB_ICC_v4_Appearance.icc.txt b/profiles/color.org/sRGB_ICC_v4_Appearance.icc.txt
index 9d3d98c..90b074c 100644
--- a/profiles/color.org/sRGB_ICC_v4_Appearance.icc.txt
+++ b/profiles/color.org/sRGB_ICC_v4_Appearance.icc.txt
@@ -17,21 +17,21 @@
 
  A2B : "A", CLUT, "M", Matrix, "B"
  "A" : 3 inputs
-  A0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  A0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 CLUT : 17 x 17 x 17 (16 bpp)
  "M" : 3 inputs
-  M0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  M1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  M2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  M0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  M1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  M2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 Mtrx : | 1.000000000 0.000000000 0.000000000 0.000000000 |
        | 0.000000000 1.000000000 0.000000000 0.000000000 |
        | 0.000000000 0.000000000 1.000000000 0.000000000 |
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	2f4e2d 92c11a 486216 190e2f 1d1048 5c4609 3e711e
 	653727 1d1711 6b4623 9c9b13 4a5b0b 2b4229 3a2375
diff --git a/profiles/color.org/sRGB_v4_ICC_preference.icc.txt b/profiles/color.org/sRGB_v4_ICC_preference.icc.txt
index bcaf072..fa6bf76 100644
--- a/profiles/color.org/sRGB_v4_ICC_preference.icc.txt
+++ b/profiles/color.org/sRGB_v4_ICC_preference.icc.txt
@@ -17,21 +17,21 @@
 
  A2B : "A", CLUT, "M", Matrix, "B"
  "A" : 3 inputs
-  A0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  A0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 CLUT : 17 x 17 x 17 (16 bpp)
  "M" : 3 inputs
-  M0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  M1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  M2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  M0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  M1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  M2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 Mtrx : | 1.000000000 0.000000000 0.000000000 0.000000000 |
        | 0.000000000 1.000000000 0.000000000 0.000000000 |
        | 0.000000000 0.000000000 1.000000000 0.000000000 |
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	0f2b1c 97bd13 445b15 190e29 1d113f 5f4706 1d4a14
 	6b3928 1f1912 764e26 b3a80d 424e05 1d3325 3b236d
diff --git a/profiles/misc/AdobeRGB.icc.txt b/profiles/misc/AdobeRGB.icc.txt
index e01c931..d5eb25c 100644
--- a/profiles/misc/AdobeRGB.icc.txt
+++ b/profiles/misc/AdobeRGB.icc.txt
@@ -16,7 +16,12 @@
  'gXYZ' : 'XYZ ' :     20 : 520
  'bXYZ' : 'XYZ ' :     20 : 540
 
- TRC : 2.19921875, 1, 0, 0, 0, 0, 0
+rTRC : 2.19922, 1, 0, 0, 0, 0, 0
+  ~= : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
+gTRC : 2.19922, 1, 0, 0, 0, 0, 0
+  ~= : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
+bTRC : 2.19922, 1, 0, 0, 0, 0, 0
+  ~= : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
  XYZ : | 0.609741211 0.205276489 0.149185181 |
        | 0.311111450 0.625671387 0.063217163 |
        | 0.019470215 0.060867310 0.744567871 |
diff --git a/profiles/misc/Apple_Color_LCD.icc.txt b/profiles/misc/Apple_Color_LCD.icc.txt
index 3a4eeec..8cdfc4a 100644
--- a/profiles/misc/Apple_Color_LCD.icc.txt
+++ b/profiles/misc/Apple_Color_LCD.icc.txt
@@ -24,14 +24,14 @@
  'aagg' : 'para' :     32 : 3652
 
 rTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00025) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000251848) (D-gap: 0)
+  ~= : 0.305304x^3 + 0.682173x^2 + 0.0125226x (Max error: 0.0016763)
 gTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00025) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000251848) (D-gap: 0)
+  ~= : 0.305304x^3 + 0.682173x^2 + 0.0125226x (Max error: 0.0016763)
 bTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00025) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000251848) (D-gap: 0)
+  ~= : 0.305304x^3 + 0.682173x^2 + 0.0125226x (Max error: 0.0016763)
  XYZ : | 0.444335938 0.379440308 0.140411377 |
        | 0.224761963 0.726165771 0.049072266 |
        | 0.005477905 0.077972412 0.741455078 |
diff --git a/profiles/misc/Apple_Wide_Color.icc.txt b/profiles/misc/Apple_Wide_Color.icc.txt
index ede8059..ba1c68e 100644
--- a/profiles/misc/Apple_Wide_Color.icc.txt
+++ b/profiles/misc/Apple_Wide_Color.icc.txt
@@ -16,21 +16,24 @@
 
  A2B : "A", CLUT, "M", Matrix, "B"
  "A" : 3 inputs
-  A0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  A0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 CLUT : 17 x 17 x 17 (16 bpp)
  "M" : 3 inputs
-  M0 : 2.3999939, 0.947906494, 0.0520935059, 0.0773925781, 0.0393066406, 0, 0
-  M1 : 2.3999939, 0.947906494, 0.0520935059, 0.0773925781, 0.0393066406, 0, 0
-  M2 : 2.3999939, 0.947906494, 0.0520935059, 0.0773925781, 0.0393066406, 0, 0
+  M0 : 2.39999, 0.947906, 0.0520935, 0.0773926, 0.0393066, 0, 0 (D-gap: -3.51714e-06)
+  ~= : 0.305693x^3 + 0.681725x^2 + 0.0125825x (Max error: 0.00166329)
+  M1 : 2.39999, 0.947906, 0.0520935, 0.0773926, 0.0393066, 0, 0 (D-gap: -3.51714e-06)
+  ~= : 0.305693x^3 + 0.681725x^2 + 0.0125825x (Max error: 0.00166329)
+  M2 : 2.39999, 0.947906, 0.0520935, 0.0773926, 0.0393066, 0, 0 (D-gap: -3.51714e-06)
+  ~= : 0.305693x^3 + 0.681725x^2 + 0.0125825x (Max error: 0.00166329)
 Mtrx : | 0.507255435 0.301234424 0.155698314 0.000000000 |
        | 0.239345714 0.694691539 0.065977998 0.000000000 |
        | 0.000457757 0.047393076 0.777148783 0.000000000 |
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	2c562d a2d713 4b6615 1a0e30 1e114a 614a06 3d8912
 	763f31 1c1711 734b27 a6a90d 4c5f06 2b442b 452790
diff --git a/profiles/misc/Coated_FOGRA39_CMYK.icc.txt b/profiles/misc/Coated_FOGRA39_CMYK.icc.txt
index 953243a..319f8a4 100644
--- a/profiles/misc/Coated_FOGRA39_CMYK.icc.txt
+++ b/profiles/misc/Coated_FOGRA39_CMYK.icc.txt
@@ -23,21 +23,21 @@
  A2B : "A", CLUT, "B"
  "A" : 4 inputs
   A0 : 16-bit table with 256 entries
-  ~= : 1.04986, 1.01943, -0.00799555, 0.836576, 0.00784314, 0.00656138, 0  (Max error: 0.017) (D-gap: 0)
-  ~= : -0.2772x^3 + 0.4481x^2 + 0.8291x (Max error: 0.005832)
+  ~= : 1.04986, 1.01943, -0.00799555, 0.836576, 0.00784314, 0.00656138, 0 (Max error: 0.0174102) (D-gap: 0)
+  ~= : -0.277204x^3 + 0.448107x^2 + 0.829097x (Max error: 0.00583246)
   A1 : 16-bit table with 256 entries
-  ~= : 1.10368, 1.0238, -0.00473501, 0.766537, 0.00784314, 0.00419043, 0  (Max error: 0.022) (D-gap: 4.7e-10)
-  ~= : -0.3874x^3 + 0.6655x^2 + 0.7219x (Max error: 0.01174)
+  ~= : 1.10368, 1.0238, -0.00473501, 0.766537, 0.00784314, 0.00419043, 0 (Max error: 0.0223907) (D-gap: 4.65661e-10)
+  ~= : -0.387404x^3 + 0.665527x^2 + 0.721877x (Max error: 0.011743)
   A2 : 16-bit table with 256 entries
-  ~= : 1.16035, 1.00803, 0.0113021, 0.708171, 0.00784314, -0.00463676, 0  (Max error: 0.015) (D-gap: 0)
-  ~= : -0.3333x^3 + 0.6616x^2 + 0.6717x (Max error: 0.00757)
+  ~= : 1.16035, 1.00803, 0.0113021, 0.708171, 0.00784314, -0.00463676, 0 (Max error: 0.0152175) (D-gap: 0)
+  ~= : -0.333271x^3 + 0.66157x^2 + 0.671701x (Max error: 0.00756961)
   A3 : 16-bit table with 256 entries
-  ~= : 0.1588x^3 + 0.08634x^2 + 0.7548x (Max error: 0.001332)
+  ~= : 0.158843x^3 + 0.0863405x^2 + 0.754817x (Max error: 0.00133198)
 CLUT : 11 x 11 x 11 x 11 (16 bpp)
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	111c23 3a220f 0c0e06 1b131a 1c1305 18220c 251f11
 	27253e 000102 101615 232f4c 4a2f21 2c2e1e 030201
diff --git a/profiles/misc/ColorLogic_ISO_Coated_CMYK.icc.txt b/profiles/misc/ColorLogic_ISO_Coated_CMYK.icc.txt
index e93be1f..5f03fb6 100644
--- a/profiles/misc/ColorLogic_ISO_Coated_CMYK.icc.txt
+++ b/profiles/misc/ColorLogic_ISO_Coated_CMYK.icc.txt
@@ -23,23 +23,23 @@
  A2B : "A", CLUT, "B"
  "A" : 4 inputs
   A0 : 16-bit table with 256 entries
-  ~= : 0.209217, 25.4362, 8.21554, 1.20078, 0.0196078, -1.54935, 0  (Max error: 2.1) (D-gap: 0)
-  ~= : 0.2321x^3 + -0.6549x^2 + 1.423x (Max error: 0.02083)
+  ~= : 0.209217, 25.4362, 8.21554, 1.20078, 0.0196078, -1.54935, 0 (Max error: 2.12113) (D-gap: 0)
+  ~= : 0.23214x^3 + -0.654921x^2 + 1.42278x (Max error: 0.0208257)
   A1 : 16-bit table with 256 entries
-  ~= : 0.2312x^3 + -0.6533x^2 + 1.422x (Max error: 0.02089)
+  ~= : 0.231158x^3 + -0.653273x^2 + 1.42212x (Max error: 0.0208911)
   A2 : 16-bit table with 256 entries
-  ~= : 0.791702, 0.910815, -0.135729, 1.24155, 0.14902, 0.185016, 0  (Max error: 0.021) (D-gap: 0)
-  ~= : 0.232x^3 + -0.6542x^2 + 1.422x (Max error: 0.02094)
+  ~= : 0.791702, 0.910815, -0.135729, 1.24155, 0.14902, 0.185016, 0 (Max error: 0.0206052) (D-gap: 0)
+  ~= : 0.231978x^3 + -0.654208x^2 + 1.42223x (Max error: 0.0209423)
   A3 : 16-bit table with 256 entries
-  ~= : 0.65406, 1.13213, 0.0862551, 1.18288, 0.0156863, -0.208999, 0  (Max error: 0.1) (D-gap: 0)
-  ~= : 0.9762x^3 + -1.635x^2 + 1.659x (Max error: 0.03557)
+  ~= : 0.65406, 1.13213, 0.0862551, 1.18288, 0.0156863, -0.208999, 0 (Max error: 0.104195) (D-gap: 0)
+  ~= : 0.976159x^3 + -1.63511x^2 + 1.65895x (Max error: 0.0355706)
 CLUT : 17 x 17 x 17 x 17 (16 bpp)
  "B" : 3 outputs
   B0 : 16-bit table with 256 entries
-  ~= : 1, 0.996109, 0, 0, 0, 0, 0  (Max error: 6e-08)
-  ~= : 0.02724x^3 + -0.03113x^2 + 1.004x (Max error: 0.003891)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  ~= : 1, 0.996109, 0, 0, 0, 0, 0 (Max error: 5.96046e-08)
+  ~= : 0.0272362x^3 + -0.0311265x^2 + 1.00389x (Max error: 0.00389105)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	101b21 382210 0c0d06 1a1318 1b1205 18210c 231e11
 	26243c 000102 101514 232e4a 492f21 2c2d1e 030201
diff --git a/profiles/misc/Color_Spin_Gamma_18.icc.txt b/profiles/misc/Color_Spin_Gamma_18.icc.txt
index bc79869..3b34710 100644
--- a/profiles/misc/Color_Spin_Gamma_18.icc.txt
+++ b/profiles/misc/Color_Spin_Gamma_18.icc.txt
@@ -15,7 +15,12 @@
  'gTRC' : 'curv' :     14 : 460
  'bTRC' : 'curv' :     14 : 460
 
- TRC : 1.80078125, 1, 0, 0, 0, 0, 0
+rTRC : 1.80078, 1, 0, 0, 0, 0, 0
+  ~= : -0.14516x^3 + 1.07371x^2 + 0.0714538x (Max error: 0.00193666)
+gTRC : 1.80078, 1, 0, 0, 0, 0, 0
+  ~= : -0.14516x^3 + 1.07371x^2 + 0.0714538x (Max error: 0.00193666)
+bTRC : 1.80078, 1, 0, 0, 0, 0, 0
+  ~= : -0.14516x^3 + 1.07371x^2 + 0.0714538x (Max error: 0.00193666)
  XYZ : | 0.385116577 0.143035889 0.436050415 |
        | 0.716903687 0.060607910 0.222488403 |
        | 0.097061157 0.713912964 0.013916016 |
diff --git a/profiles/misc/DisplayCal_ASUS_NonMonotonic.icc.txt b/profiles/misc/DisplayCal_ASUS_NonMonotonic.icc.txt
index cdcbc19..690dad0 100644
--- a/profiles/misc/DisplayCal_ASUS_NonMonotonic.icc.txt
+++ b/profiles/misc/DisplayCal_ASUS_NonMonotonic.icc.txt
@@ -31,33 +31,33 @@
  'meta' : 'dict' :   2312 : 738448
 
 rTRC : 16-bit table with 256 entries
-  ~= : 1.99944, 1.11172, -0.115069, 0.0357977, 0.117647, 0.00396373, 0  (Max error: 0.083) (D-gap: 0)
-  ~= : 0.1266x^3 + 1.011x^2 + -0.1377x (Max error: 0.008777)
+  ~= : 1.99944, 1.11172, -0.115069, 0.0357977, 0.117647, 0.00396373, 0 (Max error: 0.0831202) (D-gap: 0)
+  ~= : 0.126621x^3 + 1.01112x^2 + -0.13774x (Max error: 0.00877728)
 gTRC : 16-bit table with 256 entries
-  ~= : 2.27403, 0.980813, 0.0314167, 0.0311284, 0.192157, -0.0259432, 0  (Max error: 0.056) (D-gap: 0)
-  ~= : 0.09834x^3 + 1.047x^2 + -0.1455x (Max error: 0.006362)
+  ~= : 2.27403, 0.980813, 0.0314167, 0.0311284, 0.192157, -0.0259432, 0 (Max error: 0.0558824) (D-gap: 0)
+  ~= : 0.0983446x^3 + 1.0472x^2 + -0.145544x (Max error: 0.00636222)
 bTRC : 16-bit table with 256 entries
-  ~= : 2.19997, 1.0228, -0.0143504, 0.00389105, 0.160784, -0.0147935, 0  (Max error: 0.15) (D-gap: -2.3e-10)
-  ~= : 0.09596x^3 + 1.055x^2 + -0.1509x (Max error: 0.005556)
+  ~= : 2.19997, 1.0228, -0.0143504, 0.00389105, 0.160784, -0.0147935, 0 (Max error: 0.152941) (D-gap: -2.32831e-10)
+  ~= : 0.0959602x^3 + 1.05493x^2 + -0.150893x (Max error: 0.00555612)
  XYZ : | 0.436737061 0.380325317 0.147140503 |
        | 0.217636108 0.729843140 0.052520752 |
        | 0.002655029 0.064407349 0.757827759 |
  A2B : "A", CLUT, "B"
  "A" : 3 inputs
   A0 : 16-bit table with 2049 entries
-  ~= : 0.997553, 1.00181, -0.125226, 1.00002, 0.125, 0.125002, 0  (Max error: 0.019) (D-gap: 0)
-  ~= : -0.01022x^3 + 0.01737x^2 + 0.9928x (Max error: 0.01741)
+  ~= : 0.997553, 1.00181, -0.125226, 1.00002, 0.125, 0.125002, 0 (Max error: 0.0185264) (D-gap: 0)
+  ~= : -0.0102165x^3 + 0.0173741x^2 + 0.992842x (Max error: 0.0174073)
   A1 : 16-bit table with 2049 entries
-  ~= : 0.994697, 1.0024, -0.1253, 1.00002, 0.125, 0.125002, 0  (Max error: 0.017) (D-gap: 0)
-  ~= : -0.01251x^3 + 0.02103x^2 + 0.9915x (Max error: 0.01542)
+  ~= : 0.994697, 1.0024, -0.1253, 1.00002, 0.125, 0.125002, 0 (Max error: 0.0170505) (D-gap: 0)
+  ~= : -0.0125142x^3 + 0.0210301x^2 + 0.991484x (Max error: 0.0154224)
   A2 : 16-bit table with 2049 entries
-  ~= : 0.997287, 1.00252, -0.0313289, 1.00002, 0.03125, 0.0312505, 0  (Max error: 0.02) (D-gap: 0)
-  ~= : -0.01502x^3 + 0.02485x^2 + 0.9902x (Max error: 0.01886)
+  ~= : 0.997287, 1.00252, -0.0313289, 1.00002, 0.03125, 0.0312505, 0 (Max error: 0.0203546) (D-gap: 0)
+  ~= : -0.0150221x^3 + 0.0248452x^2 + 0.990177x (Max error: 0.0188635)
 CLUT : 33 x 33 x 33 (16 bpp)
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	1a2c18 526c09 263409 0c0619 0f0727 2f2402 264611
 	351b17 0e0b08 372313 505205 273004 162315 22124a
diff --git a/profiles/misc/Dot_Gain_20_Grayscale.icc.txt b/profiles/misc/Dot_Gain_20_Grayscale.icc.txt
index 8895c7c..64bd7f5 100644
--- a/profiles/misc/Dot_Gain_20_Grayscale.icc.txt
+++ b/profiles/misc/Dot_Gain_20_Grayscale.icc.txt
@@ -12,14 +12,14 @@
  'kTRC' : 'curv' :    524 : 388
 
 rTRC : 16-bit table with 256 entries
-  ~= : 1.73715, 0.999979, 6.92596e-05, 0.0629053, 0.0235294, -1.07513e-05, 0  (Max error: 0.0002) (D-gap: 0)
-  ~= : -0.1835x^3 + 1.081x^2 + 0.103x (Max error: 0.002633)
+  ~= : 1.73715, 0.999979, 6.92596e-05, 0.0629053, 0.0235294, -1.07513e-05, 0 (Max error: 0.000202142) (D-gap: 0)
+  ~= : -0.183519x^3 + 1.08054x^2 + 0.102974x (Max error: 0.00263339)
 gTRC : 16-bit table with 256 entries
-  ~= : 1.73715, 0.999979, 6.92596e-05, 0.0629053, 0.0235294, -1.07513e-05, 0  (Max error: 0.0002) (D-gap: 0)
-  ~= : -0.1835x^3 + 1.081x^2 + 0.103x (Max error: 0.002633)
+  ~= : 1.73715, 0.999979, 6.92596e-05, 0.0629053, 0.0235294, -1.07513e-05, 0 (Max error: 0.000202142) (D-gap: 0)
+  ~= : -0.183519x^3 + 1.08054x^2 + 0.102974x (Max error: 0.00263339)
 bTRC : 16-bit table with 256 entries
-  ~= : 1.73715, 0.999979, 6.92596e-05, 0.0629053, 0.0235294, -1.07513e-05, 0  (Max error: 0.0002) (D-gap: 0)
-  ~= : -0.1835x^3 + 1.081x^2 + 0.103x (Max error: 0.002633)
+  ~= : 1.73715, 0.999979, 6.92596e-05, 0.0629053, 0.0235294, -1.07513e-05, 0 (Max error: 0.000202142) (D-gap: 0)
+  ~= : -0.183519x^3 + 1.08054x^2 + 0.102974x (Max error: 0.00263339)
  XYZ : | 0.964202881 0.000000000 0.000000000 |
        | 0.000000000 1.000000000 0.000000000 |
        | 0.000000000 0.000000000 0.824905396 |
diff --git a/profiles/misc/Generic_RGB_Gamma_18.icc.txt b/profiles/misc/Generic_RGB_Gamma_18.icc.txt
index b70b7b4..8e824c4 100644
--- a/profiles/misc/Generic_RGB_Gamma_18.icc.txt
+++ b/profiles/misc/Generic_RGB_Gamma_18.icc.txt
@@ -17,7 +17,12 @@
  'bTRC' : 'curv' :     14 : 1900
  'gTRC' : 'curv' :     14 : 1900
 
- TRC : 1.80078125, 1, 0, 0, 0, 0, 0
+rTRC : 1.80078, 1, 0, 0, 0, 0, 0
+  ~= : -0.14516x^3 + 1.07371x^2 + 0.0714538x (Max error: 0.00193666)
+gTRC : 1.80078, 1, 0, 0, 0, 0, 0
+  ~= : -0.14516x^3 + 1.07371x^2 + 0.0714538x (Max error: 0.00193666)
+bTRC : 1.80078, 1, 0, 0, 0, 0, 0
+  ~= : -0.14516x^3 + 1.07371x^2 + 0.0714538x (Max error: 0.00193666)
  XYZ : | 0.454299927 0.353347778 0.156646729 |
        | 0.241912842 0.673629761 0.084457397 |
        | 0.014892578 0.090637207 0.719573975 |
diff --git a/profiles/misc/Gray_Gamma_22.icc.txt b/profiles/misc/Gray_Gamma_22.icc.txt
index 30ac1f8..a36fbae 100644
--- a/profiles/misc/Gray_Gamma_22.icc.txt
+++ b/profiles/misc/Gray_Gamma_22.icc.txt
@@ -11,7 +11,12 @@
  'bkpt' : 'XYZ ' :     20 : 372
  'kTRC' : 'curv' :     14 : 392
 
- TRC : 2.19921875, 1, 0, 0, 0, 0, 0
+rTRC : 2.19922, 1, 0, 0, 0, 0, 0
+  ~= : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
+gTRC : 2.19922, 1, 0, 0, 0, 0, 0
+  ~= : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
+bTRC : 2.19922, 1, 0, 0, 0, 0, 0
+  ~= : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
  XYZ : | 0.964202881 0.000000000 0.000000000 |
        | 0.000000000 1.000000000 0.000000000 |
        | 0.000000000 0.000000000 0.824905396 |
diff --git a/profiles/misc/HD_709.icc.txt b/profiles/misc/HD_709.icc.txt
index 87da1cb..139712a 100644
--- a/profiles/misc/HD_709.icc.txt
+++ b/profiles/misc/HD_709.icc.txt
@@ -24,14 +24,14 @@
  'aagg' : 'para' :     32 : 2696
 
 rTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00025) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000251848) (D-gap: 0)
+  ~= : 0.305304x^3 + 0.682173x^2 + 0.0125226x (Max error: 0.0016763)
 gTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00025) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000251848) (D-gap: 0)
+  ~= : 0.305304x^3 + 0.682173x^2 + 0.0125226x (Max error: 0.0016763)
 bTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00025) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000251848) (D-gap: 0)
+  ~= : 0.305304x^3 + 0.682173x^2 + 0.0125226x (Max error: 0.0016763)
  XYZ : | 0.358963013 0.446350098 0.158889771 |
        | 0.195922852 0.742843628 0.061233521 |
        | 0.009674072 0.043518066 0.771713257 |
diff --git a/profiles/misc/Japan_Color_2001_Coated.icc.txt b/profiles/misc/Japan_Color_2001_Coated.icc.txt
index 014dcee..40b3672 100644
--- a/profiles/misc/Japan_Color_2001_Coated.icc.txt
+++ b/profiles/misc/Japan_Color_2001_Coated.icc.txt
@@ -19,22 +19,22 @@
  A2B : "A", CLUT, "B"
  "A" : 4 inputs
   A0 : 16-bit table with 256 entries
-  ~= : 1.035, 1.04085, -0.0326543, 0.780156, 0.0313726, 0.0244755, 0  (Max error: 0.031) (D-gap: 0)
-  ~= : -0.405x^3 + 0.6245x^2 + 0.7805x (Max error: 0.007027)
+  ~= : 1.035, 1.04085, -0.0326543, 0.780156, 0.0313726, 0.0244755, 0 (Max error: 0.0307155) (D-gap: 0)
+  ~= : -0.404956x^3 + 0.624467x^2 + 0.78049x (Max error: 0.00702709)
   A1 : 16-bit table with 256 entries
-  ~= : 1.11391, 1.02128, -0.0220004, 0.627015, 0.027451, 0.0138406, 0  (Max error: 0.012) (D-gap: 0)
-  ~= : -0.3044x^3 + 0.6003x^2 + 0.704x (Max error: 0.003362)
+  ~= : 1.11391, 1.02128, -0.0220004, 0.627015, 0.027451, 0.0138406, 0 (Max error: 0.0115468) (D-gap: 0)
+  ~= : -0.304361x^3 + 0.600324x^2 + 0.704036x (Max error: 0.00336152)
   A2 : 16-bit table with 256 entries
-  ~= : 1.14818, 0.997828, 0.0230241, 0.619326, 0.0235294, -0.014941, 0  (Max error: 0.0079) (D-gap: 0)
-  ~= : -0.2304x^3 + 0.5108x^2 + 0.7196x (Max error: 0.004616)
+  ~= : 1.14818, 0.997828, 0.0230241, 0.619326, 0.0235294, -0.014941, 0 (Max error: 0.00792223) (D-gap: 0)
+  ~= : -0.230413x^3 + 0.510801x^2 + 0.719612x (Max error: 0.0046159)
   A3 : 16-bit table with 256 entries
-  ~= : 2.30032, 0.409413, 0.795021, 0.322957, 0.00392157, -0.591436, 0  (Max error: 0.054) (D-gap: -1.9e-08)
-  ~= : 0.01829x^3 + 0.3262x^2 + 0.6555x (Max error: 0.01191)
+  ~= : 2.30032, 0.409413, 0.795021, 0.322957, 0.00392157, -0.591436, 0 (Max error: 0.0541771) (D-gap: -1.93249e-08)
+  ~= : 0.0182923x^3 + 0.326188x^2 + 0.65552x (Max error: 0.0119067)
 CLUT : 9 x 9 x 9 x 9 (16 bpp)
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	101d25 3d240f 0b0d05 1b131b 1d1406 17230c 241f11
 	26233f 000001 0f1615 243052 4c3022 2c2e1d 020100
diff --git a/profiles/misc/Kodak_sRGB.icc.txt b/profiles/misc/Kodak_sRGB.icc.txt
index cb38afb..d8b922d 100644
--- a/profiles/misc/Kodak_sRGB.icc.txt
+++ b/profiles/misc/Kodak_sRGB.icc.txt
@@ -21,39 +21,39 @@
  'bTRC' : 'curv' :    524 : 149844
 
 rTRC : 16-bit table with 256 entries
-  ~= : 2.41905, 0.940167, 0.0585088, 0.0696852, 0.0431373, 0.00320302, 0.00392157  (Max error: 0.0035) (D-gap: 0)
-  ~= : 0.3366x^3 + 0.6215x^2 + 0.04197x (Max error: 0.004218)
+  ~= : 2.41905, 0.940167, 0.0585088, 0.0696852, 0.0431373, 0.00320302, 0.00392157 (Max error: 0.00349865) (D-gap: 0)
+  ~= : 0.336572x^3 + 0.621457x^2 + 0.0419708x (Max error: 0.00421829)
 gTRC : 16-bit table with 256 entries
-  ~= : 2.41905, 0.940167, 0.0585088, 0.0696852, 0.0431373, 0.00320302, 0.00392157  (Max error: 0.0035) (D-gap: 0)
-  ~= : 0.3366x^3 + 0.6215x^2 + 0.04197x (Max error: 0.004218)
+  ~= : 2.41905, 0.940167, 0.0585088, 0.0696852, 0.0431373, 0.00320302, 0.00392157 (Max error: 0.00349865) (D-gap: 0)
+  ~= : 0.336572x^3 + 0.621457x^2 + 0.0419708x (Max error: 0.00421829)
 bTRC : 16-bit table with 256 entries
-  ~= : 2.41905, 0.940167, 0.0585088, 0.0696852, 0.0431373, 0.00320302, 0.00392157  (Max error: 0.0035) (D-gap: 0)
-  ~= : 0.3366x^3 + 0.6215x^2 + 0.04197x (Max error: 0.004218)
+  ~= : 2.41905, 0.940167, 0.0585088, 0.0696852, 0.0431373, 0.00320302, 0.00392157 (Max error: 0.00349865) (D-gap: 0)
+  ~= : 0.336572x^3 + 0.621457x^2 + 0.0419708x (Max error: 0.00421829)
  XYZ : | 0.437637329 0.388412476 0.142410278 |
        | 0.214950562 0.712905884 0.072128296 |
        | 0.011260986 0.080718994 0.725875854 |
  A2B : "A", CLUT, "B"
  "A" : 3 inputs
   A0 : 16-bit table with 256 entries
-  ~= : 0.708634, 1.48685, 0.435539, 0.745866, 0.0627451, -0.589851, 0  (Max error: 0.0032) (D-gap: 0)
-  ~= : -0.1058x^3 + 0.03758x^2 + 1.068x (Max error: 0.02093)
+  ~= : 0.708634, 1.48685, 0.435539, 0.745866, 0.0627451, -0.589851, 0 (Max error: 0.00315941) (D-gap: 0)
+  ~= : -0.105768x^3 + 0.0375784x^2 + 1.06819x (Max error: 0.020932)
   A1 : 16-bit table with 256 entries
-  ~= : 0.708634, 1.48685, 0.435539, 0.745866, 0.0627451, -0.589851, 0  (Max error: 0.0032) (D-gap: 0)
-  ~= : -0.1058x^3 + 0.03758x^2 + 1.068x (Max error: 0.02093)
+  ~= : 0.708634, 1.48685, 0.435539, 0.745866, 0.0627451, -0.589851, 0 (Max error: 0.00315941) (D-gap: 0)
+  ~= : -0.105768x^3 + 0.0375784x^2 + 1.06819x (Max error: 0.020932)
   A2 : 16-bit table with 256 entries
-  ~= : 0.708634, 1.48685, 0.435539, 0.745866, 0.0627451, -0.589851, 0  (Max error: 0.0032) (D-gap: 0)
-  ~= : -0.1058x^3 + 0.03758x^2 + 1.068x (Max error: 0.02093)
+  ~= : 0.708634, 1.48685, 0.435539, 0.745866, 0.0627451, -0.589851, 0 (Max error: 0.00315941) (D-gap: 0)
+  ~= : -0.105768x^3 + 0.0375784x^2 + 1.06819x (Max error: 0.020932)
 CLUT : 8 x 8 x 8 (16 bpp)
  "B" : 3 outputs
   B0 : 16-bit table with 4096 entries
-  ~= : 5.99888, 0.75, 0, 0.998044, 0.998291, 0.82012, 0  (Max error: 0.002) (D-gap: 0)
-  ~= : 3.879e-06x^3 + -5.442e-06x^2 + 1x (Max error: 0.003662)
+  ~= : 5.99888, 0.75, 0, 0.998044, 0.998291, 0.82012, 0 (Max error: 0.00195396) (D-gap: 0)
+  ~= : 3.87949e-06x^3 + -5.44224e-06x^2 + 1x (Max error: 0.00366217)
   B1 : 16-bit table with 4096 entries
-  ~= : 5.99888, 0.75, 0, 0.998044, 0.998291, 0.82012, 0  (Max error: 0.002) (D-gap: 0)
-  ~= : 3.879e-06x^3 + -5.442e-06x^2 + 1x (Max error: 0.003662)
+  ~= : 5.99888, 0.75, 0, 0.998044, 0.998291, 0.82012, 0 (Max error: 0.00195396) (D-gap: 0)
+  ~= : 3.87949e-06x^3 + -5.44224e-06x^2 + 1x (Max error: 0.00366217)
   B2 : 16-bit table with 4096 entries
-  ~= : 5.99888, 0.75, 0, 0.998044, 0.998291, 0.82012, 0  (Max error: 0.002) (D-gap: 0)
-  ~= : 3.879e-06x^3 + -5.442e-06x^2 + 1x (Max error: 0.003662)
+  ~= : 5.99888, 0.75, 0, 0.998044, 0.998291, 0.82012, 0 (Max error: 0.00195396) (D-gap: 0)
+  ~= : 3.87949e-06x^3 + -5.44224e-06x^2 + 1x (Max error: 0.00366217)
 252 random bytes transformed to linear XYZD50 bytes:
 	355632 a5d31d 4c6517 190f30 1e124a 5d4709 4e8727
 	693a2f 1c1712 6c4626 a0a014 4d5d0c 2e442c 42288e
diff --git a/profiles/misc/Lexmark_X110.icc.txt b/profiles/misc/Lexmark_X110.icc.txt
index 8e42ed6..d69061e 100644
--- a/profiles/misc/Lexmark_X110.icc.txt
+++ b/profiles/misc/Lexmark_X110.icc.txt
@@ -14,14 +14,14 @@
 
  A2B : "A", CLUT, "B"
  "A" : 3 inputs
-  A0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  A0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 CLUT : 17 x 17 x 17 (8 bpp)
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	6fa094 d8f243 a7d043 825cbe 8365c0 a39f15 5c8161
 	a871bd 5a5249 aa8b81 d2f028 a6cb1b 729e83 937fb7
diff --git a/profiles/misc/MartiMaria_browsertest_A2B.icc.txt b/profiles/misc/MartiMaria_browsertest_A2B.icc.txt
index 65efbaf..f1e231c 100644
--- a/profiles/misc/MartiMaria_browsertest_A2B.icc.txt
+++ b/profiles/misc/MartiMaria_browsertest_A2B.icc.txt
@@ -14,14 +14,14 @@
 
  A2B : "A", CLUT, "B"
  "A" : 3 inputs
-  A0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  A0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 CLUT : 17 x 17 x 17 (16 bpp)
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	181915 7b8069 7b8069 7b8069 7b8069 7b8069 090a08
 	7b8069 7b8069 7b8069 7b8069 7b8069 7b8069 7b8069
diff --git a/profiles/misc/MartiMaria_browsertest_HARD.icc.txt b/profiles/misc/MartiMaria_browsertest_HARD.icc.txt
index 68a83bf..3d19be8 100644
--- a/profiles/misc/MartiMaria_browsertest_HARD.icc.txt
+++ b/profiles/misc/MartiMaria_browsertest_HARD.icc.txt
@@ -19,25 +19,25 @@
  'A2B2' : 'mft2' :  29554 : 2184
 
 rTRC : 16-bit table with 255 entries
-  ~= : 5.627x^3 + -10.82x^2 + 6.198x (Max error: 0.2705)
+  ~= : 5.62674x^3 + -10.8243x^2 + 6.19753x (Max error: 0.270479)
 gTRC : 16-bit table with 255 entries
-  ~= : 1, 0.00387579, 0, 0, 0, 0, 0  (Max error: 6e-08)
-  ~= : 6.972x^3 + -7.968x^2 + 1.996x (Max error: 0.9961)
+  ~= : 1, 0.00387579, 0, 0, 0, 0, 0 (Max error: 5.96046e-08)
+  ~= : 6.97233x^3 + -7.96823x^2 + 1.99589x (Max error: 0.996124)
 bTRC : 16-bit table with 255 entries
-  ~= : 5.627x^3 + -10.82x^2 + 6.198x (Max error: 0.2705)
+  ~= : 5.62674x^3 + -10.8243x^2 + 6.19753x (Max error: 0.270479)
  XYZ : | 0.964202881 0.000000000 0.964202881 |
        | 1.000000000 0.000000000 1.000000000 |
        | 0.824905396 0.000000000 0.824905396 |
  A2B : "A", CLUT, "B"
  "A" : 3 inputs
-  A0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  A0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 CLUT : 17 x 17 x 17 (16 bpp)
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	181915 7b8069 7b8069 7b8069 7b8069 7b8069 090a08
 	7b8069 7b8069 7b8069 7b8069 7b8069 7b8069 7b8069
diff --git a/profiles/misc/Phase_One_P25.icc.txt b/profiles/misc/Phase_One_P25.icc.txt
index d9738f8..07ac019 100644
--- a/profiles/misc/Phase_One_P25.icc.txt
+++ b/profiles/misc/Phase_One_P25.icc.txt
@@ -19,30 +19,30 @@
  'tech' : 'sig ' :     12 : 219352
 
 rTRC : 16-bit table with 256 entries
-  ~= : 0.41882, 1.35722, 0.00130201, 3.84436, 0.00784314, -0.126417, 0  (Max error: 0.022) (D-gap: 1.9e-09)
-  ~= : 1.474x^3 + -3.205x^2 + 2.731x (Max error: 0.0825)
+  ~= : 0.41882, 1.35722, 0.00130201, 3.84436, 0.00784314, -0.126417, 0 (Max error: 0.0220338) (D-gap: 1.86265e-09)
+  ~= : 1.47367x^3 + -3.20484x^2 + 2.73117x (Max error: 0.0824971)
 gTRC : 16-bit table with 256 entries
-  ~= : 0.293277, 2.59732, 0.0114139, 5.75486, 0.00392157, -0.302166, 0  (Max error: 0.057) (D-gap: 1.3e-08)
-  ~= : 1.873x^3 + -4.076x^2 + 3.203x (Max error: 0.1346)
+  ~= : 0.293277, 2.59732, 0.0114139, 5.75486, 0.00392157, -0.302166, 0 (Max error: 0.057198) (D-gap: 1.30385e-08)
+  ~= : 1.87283x^3 + -4.07598x^2 + 3.20315x (Max error: 0.134625)
 bTRC : 16-bit table with 256 entries
-  ~= : 0.630719, 0.929499, -0.0109353, 2.72114, 0.0117647, 0.0320134, 0  (Max error: 0.033) (D-gap: 0)
-  ~= : 1.302x^3 + -2.583x^2 + 2.281x (Max error: 0.05044)
+  ~= : 0.630719, 0.929499, -0.0109353, 2.72114, 0.0117647, 0.0320134, 0 (Max error: 0.0333357) (D-gap: 0)
+  ~= : 1.30232x^3 + -2.58303x^2 + 2.28071x (Max error: 0.0504362)
  XYZ : | 0.647903442 0.357360840 0.156417847 |
        | 0.382919312 1.109725952 0.000000000 |
        | 0.083267212 0.679275513 0.523422241 |
  A2B : "A", CLUT, "B"
  "A" : 3 inputs
   A0 : 16-bit table with 256 entries
-  ~= : 3.103x^3 + -5.715x^2 + 3.611x (Max error: 0.2053)
+  ~= : 3.1035x^3 + -5.71462x^2 + 3.61112x (Max error: 0.205335)
   A1 : 16-bit table with 256 entries
-  ~= : 3.103x^3 + -5.715x^2 + 3.611x (Max error: 0.2053)
+  ~= : 3.1035x^3 + -5.71462x^2 + 3.61112x (Max error: 0.205335)
   A2 : 16-bit table with 256 entries
-  ~= : 3.103x^3 + -5.715x^2 + 3.611x (Max error: 0.2053)
+  ~= : 3.1035x^3 + -5.71462x^2 + 3.61112x (Max error: 0.205335)
 CLUT : 33 x 33 x 33 (16 bpp)
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	1d5c40 86f80b 4a7913 2e1551 341674 8a6006 38a75e
 	b45e34 2f2417 af6d2b b4ae06 547302 1f4c33 6822be
diff --git a/profiles/misc/PrintOpen_ISO_Coated_CMYK.icc.txt b/profiles/misc/PrintOpen_ISO_Coated_CMYK.icc.txt
index 3d95f54..b079732 100644
--- a/profiles/misc/PrintOpen_ISO_Coated_CMYK.icc.txt
+++ b/profiles/misc/PrintOpen_ISO_Coated_CMYK.icc.txt
@@ -21,15 +21,15 @@
 
  A2B : "A", CLUT, "B"
  "A" : 4 inputs
-  A0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A3 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  A0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A3 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 CLUT : 16 x 16 x 16 x 16 (16 bpp)
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	162328 3a2310 090a05 1d151d 1b1306 18230c 211b10
 	2a2742 000101 101615 253047 4c3123 27291b 020201
diff --git a/profiles/misc/SWOP_Coated_20_GCR_CMYK.icc.txt b/profiles/misc/SWOP_Coated_20_GCR_CMYK.icc.txt
index 7c9bd74..a04a808 100644
--- a/profiles/misc/SWOP_Coated_20_GCR_CMYK.icc.txt
+++ b/profiles/misc/SWOP_Coated_20_GCR_CMYK.icc.txt
@@ -20,18 +20,18 @@
  A2B : "A", CLUT, "B"
  "A" : 4 inputs
   A0 : 16-bit table with 256 entries
-  ~= : -0.004962x^3 + 0.313x^2 + 0.692x (Max error: 0.04012)
+  ~= : -0.00496159x^3 + 0.312951x^2 + 0.692011x (Max error: 0.0401169)
   A1 : 16-bit table with 256 entries
-  ~= : 0.3427x^3 + -0.04205x^2 + 0.6993x (Max error: 0.02761)
+  ~= : 0.342737x^3 + -0.0420505x^2 + 0.699314x (Max error: 0.0276145)
   A2 : 16-bit table with 256 entries
-  ~= : 0.3427x^3 + -0.04205x^2 + 0.6993x (Max error: 0.02761)
+  ~= : 0.342737x^3 + -0.0420505x^2 + 0.699314x (Max error: 0.0276145)
   A3 : 16-bit table with 256 entries
-  ~= : 0.3427x^3 + -0.04205x^2 + 0.6993x (Max error: 0.02761)
+  ~= : 0.342737x^3 + -0.0420505x^2 + 0.699314x (Max error: 0.0276145)
 CLUT : 16 x 16 x 16 x 16 (16 bpp)
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	121d22 36200e 090a05 191117 181106 131d0a 221d12
 	252136 000000 0e1312 242d47 472e1f 252618 010100
diff --git a/profiles/misc/US_Web_Coated_SWOP_CMYK.icc.txt b/profiles/misc/US_Web_Coated_SWOP_CMYK.icc.txt
index 2eb04e9..d7ee6b8 100644
--- a/profiles/misc/US_Web_Coated_SWOP_CMYK.icc.txt
+++ b/profiles/misc/US_Web_Coated_SWOP_CMYK.icc.txt
@@ -19,21 +19,21 @@
  A2B : "A", CLUT, "B"
  "A" : 4 inputs
   A0 : 16-bit table with 256 entries
-  ~= : 0.773486, 1.17185, 0.175413, 2.1323, 0.00392157, -0.257074, 0  (Max error: 0.0054) (D-gap: -8.4e-09)
-  ~= : 0.1055x^3 + -0.3823x^2 + 1.277x (Max error: 0.01024)
+  ~= : 0.773486, 1.17185, 0.175413, 2.1323, 0.00392157, -0.257074, 0 (Max error: 0.0054245) (D-gap: -8.3819e-09)
+  ~= : 0.105546x^3 + -0.382264x^2 + 1.27672x (Max error: 0.0102376)
   A1 : 16-bit table with 256 entries
-  ~= : 1.01301, 0.972757, 1.55681, 1.62257, 0.0156863, -1.55588, 0  (Max error: 0.011) (D-gap: -3e-08)
-  ~= : 0.1635x^3 + -0.2655x^2 + 1.102x (Max error: 0.009072)
+  ~= : 1.01301, 0.972757, 1.55681, 1.62257, 0.0156863, -1.55588, 0 (Max error: 0.0113603) (D-gap: -2.98023e-08)
+  ~= : 0.163549x^3 + -0.265471x^2 + 1.10192x (Max error: 0.00907196)
   A2 : 16-bit table with 256 entries
-  ~= : 1.08355, 0.963537, 0.207506, 1.68677, 0.0156863, -0.169893, 0  (Max error: 0.016) (D-gap: -1.9e-09)
-  ~= : -0.01858x^3 + -0.0008925x^2 + 1.019x (Max error: 0.01557)
+  ~= : 1.08355, 0.963537, 0.207506, 1.68677, 0.0156863, -0.169893, 0 (Max error: 0.0159114) (D-gap: -1.86265e-09)
+  ~= : -0.0185813x^3 + -0.000892473x^2 + 1.01947x (Max error: 0.0155731)
   A3 : 16-bit table with 256 entries
-  ~= : 0.4144x^3 + -0.5098x^2 + 1.095x (Max error: 0.008042)
+  ~= : 0.414434x^3 + -0.509825x^2 + 1.09539x (Max error: 0.00804227)
 CLUT : 9 x 9 x 9 x 9 (16 bpp)
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	121f24 392210 0a0c06 1b141c 1d1407 151f0c 242014
 	23223b 000001 0f1514 212d48 482f22 242619 020101
diff --git a/profiles/misc/XRite_GRACol7_340_CMYK.icc.txt b/profiles/misc/XRite_GRACol7_340_CMYK.icc.txt
index 627d8cc..9aafa4e 100644
--- a/profiles/misc/XRite_GRACol7_340_CMYK.icc.txt
+++ b/profiles/misc/XRite_GRACol7_340_CMYK.icc.txt
@@ -22,15 +22,15 @@
 
  A2B : "A", CLUT, "B"
  "A" : 4 inputs
-  A0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A3 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  A0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A3 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 CLUT : 17 x 17 x 17 x 17 (16 bpp)
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	121d23 3b2510 0c0e07 1c151b 1e1607 17210e 252013
 	242239 010102 111616 212b45 493020 26281a 030201
diff --git a/profiles/misc/sRGB_HP.icc.txt b/profiles/misc/sRGB_HP.icc.txt
index 4a85200..8efd483 100644
--- a/profiles/misc/sRGB_HP.icc.txt
+++ b/profiles/misc/sRGB_HP.icc.txt
@@ -24,14 +24,14 @@
  'bTRC' : 'curv' :   2060 : 1084
 
 rTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
 gTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
 bTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
  XYZ : | 0.436065674 0.385147095 0.143066406 |
        | 0.222488403 0.716873169 0.060607910 |
        | 0.013916016 0.097076416 0.714096069 |
diff --git a/profiles/misc/sRGB_HP_2.icc.txt b/profiles/misc/sRGB_HP_2.icc.txt
index 9a85e3b..3134885 100644
--- a/profiles/misc/sRGB_HP_2.icc.txt
+++ b/profiles/misc/sRGB_HP_2.icc.txt
@@ -24,14 +24,14 @@
  'bTRC' : 'curv' :   2060 : 5201
 
 rTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
 gTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
 bTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
  XYZ : | 0.436065674 0.385147095 0.143066406 |
        | 0.222488403 0.716873169 0.060607910 |
        | 0.013916016 0.097076416 0.714096069 |
diff --git a/profiles/misc/sRGB_ICC_v4_beta.icc.txt b/profiles/misc/sRGB_ICC_v4_beta.icc.txt
index dd0b077..00f6e21 100644
--- a/profiles/misc/sRGB_ICC_v4_beta.icc.txt
+++ b/profiles/misc/sRGB_ICC_v4_beta.icc.txt
@@ -17,21 +17,21 @@
 
  A2B : "A", CLUT, "M", Matrix, "B"
  "A" : 3 inputs
-  A0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  A2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  A0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  A2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 CLUT : 17 x 17 x 17 (16 bpp)
  "M" : 3 inputs
-  M0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  M1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  M2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  M0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  M1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  M2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 Mtrx : | 1.000000000 0.000000000 0.000000000 0.000000000 |
        | 0.000000000 1.000000000 0.000000000 0.000000000 |
        | 0.000000000 0.000000000 1.000000000 0.000000000 |
  "B" : 3 outputs
-  B0 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B1 : 1, 1, 0, 0, 0, 0, 0 (Linear)
-  B2 : 1, 1, 0, 0, 0, 0, 0 (Linear)
+  B0 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B1 : 1, 1, 0, 0, 0, 0, 0 (Identity)
+  B2 : 1, 1, 0, 0, 0, 0, 0 (Identity)
 252 random bytes transformed to linear XYZD50 bytes:
 	2f4e2d 92c11a 486216 190e2f 1d1048 5c4609 3e711e
 	653727 1d1711 6b4623 9c9b13 4a5b0b 2b4229 3a2375
diff --git a/profiles/misc/sRGB_black_scaled.icc.txt b/profiles/misc/sRGB_black_scaled.icc.txt
index 61b4362..16e3282 100644
--- a/profiles/misc/sRGB_black_scaled.icc.txt
+++ b/profiles/misc/sRGB_black_scaled.icc.txt
@@ -23,14 +23,14 @@
  'chad' : 'sf32' :     44 : 3004
 
 rTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
 gTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
 bTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
  XYZ : | 0.436065674 0.385147095 0.143066406 |
        | 0.222488403 0.716873169 0.060607910 |
        | 0.013916016 0.097076416 0.714096069 |
diff --git a/profiles/misc/sRGB_lcms.icc.txt b/profiles/misc/sRGB_lcms.icc.txt
index 4a248d7..a1d48b4 100644
--- a/profiles/misc/sRGB_lcms.icc.txt
+++ b/profiles/misc/sRGB_lcms.icc.txt
@@ -17,7 +17,12 @@
  'bTRC' : 'para' :     32 : 588
  'chrm' : 'chrm' :     36 : 620
 
- TRC : 2.3999939, 0.947860718, 0.0521392822, 0.0773925781, 0.0404510498, 0, 0 (sRGB)
+rTRC : 2.39999, 0.947861, 0.0521393, 0.0773926, 0.040451, 0, 0 (D-gap: 8.2748e-07) (sRGB)
+  ~= : 0.305647x^3 + 0.681704x^2 + 0.0126491x (Max error: 0.00166379)
+gTRC : 2.39999, 0.947861, 0.0521393, 0.0773926, 0.040451, 0, 0 (D-gap: 8.2748e-07) (sRGB)
+  ~= : 0.305647x^3 + 0.681704x^2 + 0.0126491x (Max error: 0.00166379)
+bTRC : 2.39999, 0.947861, 0.0521393, 0.0773926, 0.040451, 0, 0 (D-gap: 8.2748e-07) (sRGB)
+  ~= : 0.305647x^3 + 0.681704x^2 + 0.0126491x (Max error: 0.00166379)
  XYZ : | 0.435852051 0.385330200 0.143020630 |
        | 0.222381592 0.717041016 0.060592651 |
        | 0.013916016 0.097137451 0.713836670 |
diff --git a/profiles/mobile/Display_P3_LUT.icc.txt b/profiles/mobile/Display_P3_LUT.icc.txt
index 0f766cb..76d9c1c 100644
--- a/profiles/mobile/Display_P3_LUT.icc.txt
+++ b/profiles/mobile/Display_P3_LUT.icc.txt
@@ -18,14 +18,14 @@
  'gTRC' : 'curv' :   2060 : 508
 
 rTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
 gTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
 bTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
  XYZ : | 0.515121460 0.291976929 0.157104492 |
        | 0.241195679 0.692245483 0.066574097 |
        | -0.001037598 0.041885376 0.784072876 |
diff --git a/profiles/mobile/Display_P3_parametric.icc.txt b/profiles/mobile/Display_P3_parametric.icc.txt
index af47040..4da57e1 100644
--- a/profiles/mobile/Display_P3_parametric.icc.txt
+++ b/profiles/mobile/Display_P3_parametric.icc.txt
@@ -17,7 +17,12 @@
  'bTRC' : 'para' :     32 : 508
  'gTRC' : 'para' :     32 : 508
 
- TRC : 2.3999939, 0.947860718, 0.0521392822, 0.0773925781, 0.0404510498, 0, 0 (sRGB)
+rTRC : 2.39999, 0.947861, 0.0521393, 0.0773926, 0.040451, 0, 0 (D-gap: 8.2748e-07) (sRGB)
+  ~= : 0.305647x^3 + 0.681704x^2 + 0.0126491x (Max error: 0.00166379)
+gTRC : 2.39999, 0.947861, 0.0521393, 0.0773926, 0.040451, 0, 0 (D-gap: 8.2748e-07) (sRGB)
+  ~= : 0.305647x^3 + 0.681704x^2 + 0.0126491x (Max error: 0.00166379)
+bTRC : 2.39999, 0.947861, 0.0521393, 0.0773926, 0.040451, 0, 0 (D-gap: 8.2748e-07) (sRGB)
+  ~= : 0.305647x^3 + 0.681704x^2 + 0.0126491x (Max error: 0.00166379)
  XYZ : | 0.515121460 0.291976929 0.157104492 |
        | 0.241195679 0.692245483 0.066574097 |
        | -0.001037598 0.041885376 0.784072876 |
diff --git a/profiles/mobile/iPhone7p.icc.txt b/profiles/mobile/iPhone7p.icc.txt
index 762aeac..08db75d 100644
--- a/profiles/mobile/iPhone7p.icc.txt
+++ b/profiles/mobile/iPhone7p.icc.txt
@@ -16,7 +16,12 @@
  'bTRC' : 'para' :     32 : 472
  'gTRC' : 'para' :     32 : 472
 
- TRC : 2.3999939, 0.947998047, 0.0520019531, 0.0769958496, 0.0390014648, 0, 0
+rTRC : 2.39999, 0.947998, 0.052002, 0.0769958, 0.0390015, 0, 0 (D-gap: 4.88153e-06)
+  ~= : 0.305782x^3 + 0.68177x^2 + 0.012448x (Max error: 0.0016624)
+gTRC : 2.39999, 0.947998, 0.052002, 0.0769958, 0.0390015, 0, 0 (D-gap: 4.88153e-06)
+  ~= : 0.305782x^3 + 0.68177x^2 + 0.012448x (Max error: 0.0016624)
+bTRC : 2.39999, 0.947998, 0.052002, 0.0769958, 0.0390015, 0, 0 (D-gap: 4.88153e-06)
+  ~= : 0.305782x^3 + 0.68177x^2 + 0.012448x (Max error: 0.0016624)
  XYZ : | 0.515121460 0.291976929 0.157104492 |
        | 0.241195679 0.692245483 0.066574097 |
        | -0.001052856 0.041885376 0.784072876 |
diff --git a/profiles/mobile/sRGB_LUT.icc.txt b/profiles/mobile/sRGB_LUT.icc.txt
index 59432c0..b703629 100644
--- a/profiles/mobile/sRGB_LUT.icc.txt
+++ b/profiles/mobile/sRGB_LUT.icc.txt
@@ -18,14 +18,14 @@
  'gTRC' : 'curv' :   2060 : 520
 
 rTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
 gTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
 bTRC : 16-bit table with 1024 entries
-  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0  (Max error: 0.00024) (D-gap: 0)
-  ~= : 0.3053x^3 + 0.6822x^2 + 0.01252x (Max error: 0.001676)
+  ~= : 2.39978, 0.947934, 0.052081, 0.0777105, 0.0449658, -1.28639e-06, 0 (Max error: 0.000239041) (D-gap: 0)
+  ~= : 0.305305x^3 + 0.682172x^2 + 0.0125229x (Max error: 0.00167628)
  XYZ : | 0.436035156 0.385116577 0.143051147 |
        | 0.222488403 0.716903687 0.060607910 |
        | 0.013916016 0.097061157 0.713912964 |
diff --git a/profiles/mobile/sRGB_parametric.icc.txt b/profiles/mobile/sRGB_parametric.icc.txt
index 3f132af..1ab7473 100644
--- a/profiles/mobile/sRGB_parametric.icc.txt
+++ b/profiles/mobile/sRGB_parametric.icc.txt
@@ -17,7 +17,12 @@
  'bTRC' : 'para' :     32 : 520
  'gTRC' : 'para' :     32 : 520
 
- TRC : 2.3999939, 0.947860718, 0.0521392822, 0.0773925781, 0.0404510498, 0, 0 (sRGB)
+rTRC : 2.39999, 0.947861, 0.0521393, 0.0773926, 0.040451, 0, 0 (D-gap: 8.2748e-07) (sRGB)
+  ~= : 0.305647x^3 + 0.681704x^2 + 0.0126491x (Max error: 0.00166379)
+gTRC : 2.39999, 0.947861, 0.0521393, 0.0773926, 0.040451, 0, 0 (D-gap: 8.2748e-07) (sRGB)
+  ~= : 0.305647x^3 + 0.681704x^2 + 0.0126491x (Max error: 0.00166379)
+bTRC : 2.39999, 0.947861, 0.0521393, 0.0773926, 0.040451, 0, 0 (D-gap: 8.2748e-07) (sRGB)
+  ~= : 0.305647x^3 + 0.681704x^2 + 0.0126491x (Max error: 0.00166379)
  XYZ : | 0.436035156 0.385116577 0.143051147 |
        | 0.222488403 0.716903687 0.060607910 |
        | 0.013916016 0.097061157 0.713912964 |
diff --git a/profiles/sRGB_Facebook.icc.txt b/profiles/sRGB_Facebook.icc.txt
index cf1098b..b7a0c6d 100644
--- a/profiles/sRGB_Facebook.icc.txt
+++ b/profiles/sRGB_Facebook.icc.txt
@@ -17,14 +17,14 @@
  'bTRC' : 'curv' :     64 : 460
 
 rTRC : 16-bit table with 26 entries
-  ~= : 2.39737, 0.949209, 0.0506402, 0.0774395, 0.04, 0.000100383, 0  (Max error: 0.0014) (D-gap: 0)
-  ~= : 0.3071x^3 + 0.681x^2 + 0.01189x (Max error: 0.001513)
+  ~= : 2.39737, 0.949209, 0.0506402, 0.0774395, 0.04, 0.000100383, 0 (Max error: 0.0013938) (D-gap: 0)
+  ~= : 0.307076x^3 + 0.681032x^2 + 0.011892x (Max error: 0.0015126)
 gTRC : 16-bit table with 26 entries
-  ~= : 2.39737, 0.949209, 0.0506402, 0.0774395, 0.04, 0.000100383, 0  (Max error: 0.0014) (D-gap: 0)
-  ~= : 0.3071x^3 + 0.681x^2 + 0.01189x (Max error: 0.001513)
+  ~= : 2.39737, 0.949209, 0.0506402, 0.0774395, 0.04, 0.000100383, 0 (Max error: 0.0013938) (D-gap: 0)
+  ~= : 0.307076x^3 + 0.681032x^2 + 0.011892x (Max error: 0.0015126)
 bTRC : 16-bit table with 26 entries
-  ~= : 2.39737, 0.949209, 0.0506402, 0.0774395, 0.04, 0.000100383, 0  (Max error: 0.0014) (D-gap: 0)
-  ~= : 0.3071x^3 + 0.681x^2 + 0.01189x (Max error: 0.001513)
+  ~= : 2.39737, 0.949209, 0.0506402, 0.0774395, 0.04, 0.000100383, 0 (Max error: 0.0013938) (D-gap: 0)
+  ~= : 0.307076x^3 + 0.681032x^2 + 0.011892x (Max error: 0.0015126)
  XYZ : | 0.436065674 0.385147095 0.143066406 |
        | 0.222488403 0.716873169 0.060607910 |
        | 0.013916016 0.097076416 0.714096069 |
diff --git a/test_only.c b/test_only.c
index 5b62058..12724e0 100644
--- a/test_only.c
+++ b/test_only.c
@@ -119,7 +119,7 @@
         && tf->f ==      0 / 65536.0f;
 }
 
-static bool is_linear(const skcms_TransferFunction* tf) {
+static bool is_identity(const skcms_TransferFunction* tf) {
     return tf->g == 1.0f
         && tf->a == 1.0f
         && tf->b == 0.0f
@@ -129,83 +129,62 @@
         && tf->f == 0.0f;
 }
 
-static void dump_transfer_function(FILE* fp, const char* name, const skcms_TransferFunction* tf) {
-    fprintf(fp, "%4s : %.9g, %.9g, %.9g, %.9g, %.9g, %.9g, %.9g", name,
-            tf->g, tf->a, tf->b, tf->c, tf->d, tf->e, tf->f);
-    if (is_sRGB(tf)) {
-        fprintf(fp, " (sRGB)");
-    } else if (is_linear(tf)) {
-        fprintf(fp, " (Linear)");
-    }
-    fprintf(fp, "\n");
+static void dump_approx_tf13(FILE* fp, const skcms_TF13* tf, float max_error) {
+    fprintf(fp, "  ~= : %.6gx^3 + %.6gx^2 + %.6gx (Max error: %.6g)\n",
+            tf->A, tf->B, (1 - tf->A - tf->B), max_error);
 }
 
-static void dump_approx_transfer_function(FILE* fp, const skcms_TransferFunction* tf,
-                                          float max_error, bool for_unit_test) {
-    if (for_unit_test) {
-        fprintf(fp, "  ~= : %.6g, %.6g, %.6g, %.6g, %.6g, %.6g, %.6g  (Max error: %.2g)",
-                tf->g, tf->a, tf->b, tf->c, tf->d, tf->e, tf->f, max_error);
-    } else {
-        fprintf(fp, "  ~= : %.9g, %.9g, %.9g, %.9g, %.9g, %.9g, %.9g  (Max error: %.9g)",
-                tf->g, tf->a, tf->b, tf->c, tf->d, tf->e, tf->f, max_error);
+static void dump_transfer_function(FILE* fp, const char* name,
+                                   const skcms_TransferFunction* tf, float max_error) {
+    fprintf(fp, "%4s : %.6g, %.6g, %.6g, %.6g, %.6g, %.6g, %.6g", name,
+            tf->g, tf->a, tf->b, tf->c, tf->d, tf->e, tf->f);
+
+    if (max_error > 0) {
+        fprintf(fp, " (Max error: %.6g)", max_error);
     }
+
     if (tf->d > 0) {
         // Has both linear and nonlinear sections, include the discontinuity at D
         float l_at_d = (tf->c * tf->d + tf->f);
         float n_at_d = powf_(tf->a * tf->d + tf->b, tf->g) + tf->e;
-        fprintf(fp, " (D-gap: %.*g)", for_unit_test ? 2 : 9, (n_at_d - l_at_d));
+        fprintf(fp, " (D-gap: %.6g)", (n_at_d - l_at_d));
     }
-    if (is_linear(tf)) {
-        fprintf(fp, " (Linear)");
+
+    if (is_sRGB(tf)) {
+        fprintf(fp, " (sRGB)");
+    } else if (is_identity(tf)) {
+        fprintf(fp, " (Identity)");
     }
     fprintf(fp, "\n");
+
+    if (max_error == 0 && !is_identity(tf)) {
+        skcms_TF13 tf13;
+        skcms_Curve curve = { {0, *tf} };
+        if (skcms_ApproximateCurve13(&curve, &tf13, &max_error)) {
+            dump_approx_tf13(fp, &tf13, max_error);
+        }
+    }
 }
 
-static void dump_approx_tf13(FILE* fp, const skcms_TF13* tf,
-                             float max_error, bool for_unit_test) {
-    (void)for_unit_test;
-    fprintf(fp, "  ~= : %.4gx^3 + %.4gx^2 + %.4gx (Max error: %.4g)\n",
-            tf->A, tf->B, (1 - tf->A - tf->B), max_error);
-}
-
-static void dump_curve(FILE* fp, const char* name, const skcms_Curve* curve, bool for_unit_test) {
-    if (curve->table_entries) {
+static void dump_curve(FILE* fp, const char* name, const skcms_Curve* curve) {
+    if (curve->table_entries == 0) {
+        dump_transfer_function(fp, name, &curve->parametric, 0);
+    } else {
         fprintf(fp, "%4s : %d-bit table with %u entries\n", name,
                 curve->table_8 ? 8 : 16, curve->table_entries);
-        skcms_TransferFunction tf;
         float max_error;
+        skcms_TransferFunction tf;
         if (skcms_ApproximateCurve(curve, &tf, &max_error)) {
-            dump_approx_transfer_function(fp, &tf, max_error, for_unit_test);
+            dump_transfer_function(fp, "~=", &tf, max_error);
         }
         skcms_TF13 tf13;
         if (skcms_ApproximateCurve13(curve, &tf13, &max_error)) {
-            dump_approx_tf13(fp, &tf13, max_error, for_unit_test);
+            dump_approx_tf13(fp, &tf13, max_error);
         }
-    } else {
-        dump_transfer_function(fp, name, &curve->parametric);
     }
 }
 
-static bool has_single_transfer_function(const skcms_ICCProfile* profile,
-                                         skcms_TransferFunction* tf) {
-    const skcms_Curve* trc = profile->trc;
-    if (profile->has_trc &&
-            trc[0].table_entries == 0 &&
-            trc[1].table_entries == 0 &&
-            trc[2].table_entries == 0) {
-
-        if (0 != memcmp(&trc[0].parametric, &trc[1].parametric, sizeof(skcms_TransferFunction)) ||
-            0 != memcmp(&trc[0].parametric, &trc[2].parametric, sizeof(skcms_TransferFunction))) {
-            return false;
-        }
-
-        memcpy(tf, &trc[0].parametric, sizeof(skcms_TransferFunction));
-        return true;
-    }
-    return false;
-}
-
-void dump_profile(const skcms_ICCProfile* profile, FILE* fp, bool for_unit_test) {
+void dump_profile(const skcms_ICCProfile* profile, FILE* fp) {
     fprintf(fp, "%20s : 0x%08X : %u\n", "Size", profile->size, profile->size);
     dump_sig_field(fp, "Data color space", profile->data_color_space);
     dump_sig_field(fp, "PCS", profile->pcs);
@@ -228,13 +207,10 @@
 
     fprintf(fp, "\n");
 
-    skcms_TransferFunction tf;
-    if (has_single_transfer_function(profile, &tf)) {
-        dump_transfer_function(fp, "TRC", &tf);
-    } else if (profile->has_trc) {
+    if (profile->has_trc) {
         const char* trcNames[3] = { "rTRC", "gTRC", "bTRC" };
         for (int i = 0; i < 3; ++i) {
-            dump_curve(fp, trcNames[i], &profile->trc[i], for_unit_test);
+            dump_curve(fp, trcNames[i], &profile->trc[i]);
         }
     }
 
@@ -256,7 +232,7 @@
             fprintf(fp, "%4s : %u inputs\n", "\"A\"", a2b->input_channels);
             const char* curveNames[4] = { "A0", "A1", "A2", "A3" };
             for (uint32_t i = 0; i < a2b->input_channels; ++i) {
-                dump_curve(fp, curveNames[i], &a2b->input_curves[i], for_unit_test);
+                dump_curve(fp, curveNames[i], &a2b->input_curves[i]);
             }
             fprintf(fp, "%4s : ", "CLUT");
             const char* sep = "";
@@ -271,7 +247,7 @@
             fprintf(fp, "%4s : %u inputs\n", "\"M\"", a2b->matrix_channels);
             const char* curveNames[4] = { "M0", "M1", "M2" };
             for (uint32_t i = 0; i < a2b->matrix_channels; ++i) {
-                dump_curve(fp, curveNames[i], &a2b->matrix_curves[i], for_unit_test);
+                dump_curve(fp, curveNames[i], &a2b->matrix_curves[i]);
             }
             const skcms_Matrix3x4* m = &a2b->matrix;
             fprintf(fp, "Mtrx : | %.9f %.9f %.9f %.9f |\n"
@@ -286,7 +262,7 @@
             fprintf(fp, "%4s : %u outputs\n", "\"B\"", a2b->output_channels);
             const char* curveNames[3] = { "B0", "B1", "B2" };
             for (uint32_t i = 0; i < a2b->output_channels; ++i) {
-                dump_curve(fp, curveNames[i], &a2b->output_curves[i], for_unit_test);
+                dump_curve(fp, curveNames[i], &a2b->output_curves[i]);
             }
         }
     }
diff --git a/test_only.h b/test_only.h
index a30d874..63a2983 100644
--- a/test_only.h
+++ b/test_only.h
@@ -10,7 +10,7 @@
 #include "skcms.h"
 #include <stdio.h>
 
-void dump_profile(const skcms_ICCProfile* profile, FILE* fp, bool for_unit_test);
+void dump_profile(const skcms_ICCProfile* profile, FILE* fp);
 
 bool load_file_fp(FILE* fp, void** buf, size_t* len);
 bool load_file(const char* filename, void** buf, size_t* len);
diff --git a/tests.c b/tests.c
index d79e6c1..6d0b9f8 100644
--- a/tests.c
+++ b/tests.c
@@ -561,7 +561,7 @@
         expect(dump);
 
         if (parsed) {
-            dump_profile(&profile, dump, true);
+            dump_profile(&profile, dump);
         } else {
             fprintf(dump, "Unable to parse ICC profile\n");
         }