Repository: facelessuser/coloraide (language: python)

Issue:
Possibly extend Robertson 1968 CCT to 1000K
We've been able to replicate the calculations to generate the 31 points (with corrections as noted here http://www.brucelindbloom.com/index.html?Math.html). With this, we have full confidence that we can generate the original table values and values above and beyond the original 31 points with the same accuracy and consistency. We _could_ even generate them at higher precision, higher resolution, etc.

With all of that said, we will likely generate the 31 points as documented to provide a faithful version, but possibly with the one expectation that we may extend the low range to 1000K. We've already made some adjustments to the algorithm to handle the change in slope that occurs in very low wavelengths (slope changing from negative to positive). We just need to make one more change to accommodate changes in slope in relation to Duv


Discussion / hints:
The differences are noted below. Everything is the same except we now have points to guide the curve through 1667K - 1000K and it now looks like it should.

![original](https://github.com/facelessuser/coloraide/assets/1055125/8e8729ea-25e1-4f8a-b0df-79e9ecacc9d5)
![extended](https://github.com/facelessuser/coloraide/assets/1055125/bad9b399-761d-4bff-9d01-b825334c7fef)

I'm thinking this may be a nice way to unify the two offerings we have. It faithfully implements the documented range, but also extends it and would align both approaches to operate between 1000K - 100000K. Robertson will be faster, but less accurate, but maybe make sense to be the default due to its speed and it is decent enough for general purposes. Technically, Robertson will give you a range out to infinity but the accuracy drops more and more as you approach infinity. 

Ohno can be used for times when more accuracy is required. While we've improved the performance, it will be slower, than Robertson.

To be honest, Robertson can have its accuracy greatly improved by increasing data point resolution, much like how we extended its range to 1000K. We can leave this up to the user, as they can actually pass in their own tables if desired, even tables built off other CMFs. More precision could also be provided for values in the table, so we have a bit of flexibility for custom approaches and improvements.



Fix patch:
diff --git a/coloraide/cmfs.py b/coloraide/cmfs.py
index 20f89bb13..5348cd43c 100644
--- a/coloraide/cmfs.py
+++ b/coloraide/cmfs.py
@@ -4,99 +4,475 @@
 # http://www-cvrl.ucsd.edu/cmfs.htm
 cie_1931_2deg = {
     360: (0.000129900000, 0.000003917000, 0.000606100000),
+    361: (0.000145847000, 0.000004393581, 0.000680879200),
+    362: (0.000163802100, 0.000004929604, 0.000765145600),
+    363: (0.000184003700, 0.000005532136, 0.000860012400),
+    364: (0.000206690200, 0.000006208245, 0.000966592800),
     365: (0.000232100000, 0.000006965000, 0.001086000000),
+    366: (0.000260728000, 0.000007813219, 0.001220586000),
+    367: (0.000293075000, 0.000008767336, 0.001372729000),
+    368: (0.000329388000, 0.000009839844, 0.001543579000),
+    369: (0.000369914000, 0.000011043230, 0.001734286000),
     370: (0.000414900000, 0.000012390000, 0.001946000000),
+    371: (0.000464158700, 0.000013886410, 0.002177777000),
+    372: (0.000518986000, 0.000015557280, 0.002435809000),
+    373: (0.000581854000, 0.000017442960, 0.002731953000),
+    374: (0.000655234700, 0.000019583750, 0.003078064000),
     375: (0.000741600000, 0.000022020000, 0.003486000000),
+    376: (0.000845029600, 0.000024839650, 0.003975227000),
+    377: (0.000964526800, 0.000028041260, 0.004540880000),
+    378: (0.001094949000, 0.000031531040, 0.005158320000),
+    379: (0.001231154000, 0.000035215210, 0.005802907000),
     380: (0.001368000000, 0.000039000000, 0.006450001000),
+    381: (0.001502050000, 0.000042826400, 0.007083216000),
+    382: (0.001642328000, 0.000046914600, 0.007745488000),
+    383: (0.001802382000, 0.000051589600, 0.008501152000),
+    384: (0.001995757000, 0.000057176400, 0.009414544000),
     385: (0.002236000000, 0.000064000000, 0.010549990000),
+    386: (0.002535385000, 0.000072344210, 0.011965800000),
+    387: (0.002892603000, 0.000082212240, 0.013655870000),
+    388: (0.003300829000, 0.000093508160, 0.015588050000),
+    389: (0.003753236000, 0.000106136100, 0.017730150000),
     390: (0.004243000000, 0.000120000000, 0.020050010000),
+    391: (0.004762389000, 0.000134984000, 0.022511360000),
+    392: (0.005330048000, 0.000151492000, 0.025202880000),
+    393: (0.005978712000, 0.000170208000, 0.028279720000),
+    394: (0.006741117000, 0.000191816000, 0.031897040000),
     395: (0.007650000000, 0.000217000000, 0.036210000000),
+    396: (0.008751373000, 0.000246906700, 0.041437710000),
+    397: (0.010028880000, 0.000281240000, 0.047503720000),
+    398: (0.011421700000, 0.000318520000, 0.054119880000),
+    399: (0.012869010000, 0.000357266700, 0.060998030000),
     400: (0.014310000000, 0.000396000000, 0.067850010000),
+    401: (0.015704430000, 0.000433714700, 0.074486320000),
+    402: (0.017147440000, 0.000473024000, 0.081361560000),
+    403: (0.018781220000, 0.000517876000, 0.089153640000),
+    404: (0.020748010000, 0.000572218700, 0.098540480000),
     405: (0.023190000000, 0.000640000000, 0.110200000000),
+    406: (0.026207360000, 0.000724560000, 0.124613300000),
+    407: (0.029782480000, 0.000825500000, 0.141701700000),
+    408: (0.033880920000, 0.000941160000, 0.161303500000),
+    409: (0.038468240000, 0.001069880000, 0.183256800000),
     410: (0.043510000000, 0.001210000000, 0.207400000000),
+    411: (0.048995600000, 0.001362091000, 0.233692100000),
+    412: (0.055022600000, 0.001530752000, 0.262611400000),
+    413: (0.061718800000, 0.001720368000, 0.294774600000),
+    414: (0.069212000000, 0.001935323000, 0.330798500000),
     415: (0.077630000000, 0.002180000000, 0.371300000000),
+    416: (0.086958110000, 0.002454800000, 0.416209100000),
+    417: (0.097176720000, 0.002764000000, 0.465464200000),
+    418: (0.108406300000, 0.003117800000, 0.519694800000),
+    419: (0.120767200000, 0.003526400000, 0.579530300000),
     420: (0.134380000000, 0.004000000000, 0.645600000000),
+    421: (0.149358200000, 0.004546240000, 0.718483800000),
+    422: (0.165395700000, 0.005159320000, 0.796713300000),
+    423: (0.181983100000, 0.005829280000, 0.877845900000),
+    424: (0.198611000000, 0.006546160000, 0.959439000000),
     425: (0.214770000000, 0.007300000000, 1.039050100000),
+    426: (0.230186800000, 0.008086507000, 1.115367300000),
+    427: (0.244879700000, 0.008908720000, 1.188497100000),
+    428: (0.258777300000, 0.009767680000, 1.258123300000),
+    429: (0.271807900000, 0.010664430000, 1.323929600000),
     430: (0.283900000000, 0.011600000000, 1.385600000000),
+    431: (0.294943800000, 0.012573170000, 1.442635200000),
+    432: (0.304896500000, 0.013582720000, 1.494803500000),
+    433: (0.313787300000, 0.014629680000, 1.542190300000),
+    434: (0.321645400000, 0.015715090000, 1.584880700000),
     435: (0.328500000000, 0.016840000000, 1.622960000000),
+    436: (0.334351300000, 0.018007360000, 1.656404800000),
+    437: (0.339210100000, 0.019214480000, 1.685295900000),
+    438: (0.343121300000, 0.020453920000, 1.709874500000),
+    439: (0.346129600000, 0.021718240000, 1.730382100000),
     440: (0.348280000000, 0.023000000000, 1.747060000000),
+    441: (0.349599900000, 0.024294610000, 1.760044600000),
+    442: (0.350147400000, 0.025610240000, 1.769623300000),
+    443: (0.350013000000, 0.026958570000, 1.776263700000),
+    444: (0.349287000000, 0.028351250000, 1.780433400000),
     445: (0.348060000000, 0.029800000000, 1.782600000000),
+    446: (0.346373300000, 0.031310830000, 1.782968200000),
+    447: (0.344262400000, 0.032883680000, 1.781699800000),
+    448: (0.341808800000, 0.034521120000, 1.779198200000),
+    449: (0.339094100000, 0.036225710000, 1.775867100000),
     450: (0.336200000000, 0.038000000000, 1.772110000000),
+    451: (0.333197700000, 0.039846670000, 1.768258900000),
+    452: (0.330041100000, 0.041768000000, 1.764039000000),
+    453: (0.326635700000, 0.043766000000, 1.758943800000),
+    454: (0.322886800000, 0.045842670000, 1.752466300000),
     455: (0.318700000000, 0.048000000000, 1.744100000000),
+    456: (0.314025100000, 0.050243680000, 1.733559500000),
+    457: (0.308884000000, 0.052573040000, 1.720858100000),
+    458: (0.303290400000, 0.054980560000, 1.705936900000),
+    459: (0.297257900000, 0.057458720000, 1.688737200000),
     460: (0.290800000000, 0.060000000000, 1.669200000000),
+    461: (0.283970100000, 0.062601970000, 1.647528700000),
+    462: (0.276721400000, 0.065277520000, 1.623412700000),
+    463: (0.268917800000, 0.068042080000, 1.596022300000),
+    464: (0.260422700000, 0.070911090000, 1.564528000000),
     465: (0.251100000000, 0.073900000000, 1.528100000000),
+    466: (0.240847500000, 0.077016000000, 1.486111400000),
+    467: (0.229851200000, 0.080266400000, 1.439521500000),
+    468: (0.218407200000, 0.083666800000, 1.389879900000),
+    469: (0.206811500000, 0.087232800000, 1.338736200000),
     470: (0.195360000000, 0.090980000000, 1.287640000000),
+    471: (0.184213600000, 0.094917550000, 1.237422300000),
+    472: (0.173327300000, 0.099045840000, 1.187824300000),
+    473: (0.162688100000, 0.103367400000, 1.138761100000),
+    474: (0.152283300000, 0.107884600000, 1.090148000000),
     475: (0.142100000000, 0.112600000000, 1.041900000000),
+    476: (0.132178600000, 0.117532000000, 0.994197600000),
+    477: (0.122569600000, 0.122674400000, 0.947347300000),
+    478: (0.113275200000, 0.127992800000, 0.901453100000),
+    479: (0.104297900000, 0.133452800000, 0.856619300000),
     480: (0.095640000000, 0.139020000000, 0.812950100000),
+    481: (0.087299550000, 0.144676400000, 0.770517300000),
+    482: (0.079308040000, 0.150469300000, 0.729444800000),
+    483: (0.071717760000, 0.156461900000, 0.689913600000),
+    484: (0.064580990000, 0.162717700000, 0.652104900000),
     485: (0.057950010000, 0.169300000000, 0.616200000000),
+    486: (0.051862110000, 0.176243100000, 0.582328600000),
+    487: (0.046281520000, 0.183558100000, 0.550416200000),
+    488: (0.041150880000, 0.191273500000, 0.520337600000),
+    489: (0.036412830000, 0.199418000000, 0.491967300000),
     490: (0.032010000000, 0.208020000000, 0.465180000000),
+    491: (0.027917200000, 0.217119900000, 0.439924600000),
+    492: (0.024144400000, 0.226734500000, 0.416183600000),
+    493: (0.020687000000, 0.236857100000, 0.393882200000),
+    494: (0.017540400000, 0.247481200000, 0.372945900000),
     495: (0.014700000000, 0.258600000000, 0.353300000000),
+    496: (0.012161790000, 0.270184900000, 0.334857800000),
+    497: (0.009919960000, 0.282293900000, 0.317552100000),
+    498: (0.007967240000, 0.295050500000, 0.301337500000),
+    499: (0.006296346000, 0.308578000000, 0.286168600000),
     500: (0.004900000000, 0.323000000000, 0.272000000000),
+    501: (0.003777173000, 0.338402100000, 0.258817100000),
+    502: (0.002945320000, 0.354685800000, 0.246483800000),
+    503: (0.002424880000, 0.371698600000, 0.234771800000),
+    504: (0.002236293000, 0.389287500000, 0.223453300000),
     505: (0.002400000000, 0.407300000000, 0.212300000000),
+    506: (0.002925520000, 0.425629900000, 0.201169200000),
+    507: (0.003836560000, 0.444309600000, 0.190119600000),
+    508: (0.005174840000, 0.463394400000, 0.179225400000),
+    509: (0.006982080000, 0.482939500000, 0.168560800000),
     510: (0.009300000000, 0.503000000000, 0.158200000000),
+    511: (0.012149490000, 0.523569300000, 0.148138300000),
+    512: (0.015535880000, 0.544512000000, 0.138375800000),
+    513: (0.019477520000, 0.565690000000, 0.128994200000),
+    514: (0.023992770000, 0.586965300000, 0.120075100000),
     515: (0.029100000000, 0.608200000000, 0.111700000000),
+    516: (0.034814850000, 0.629345600000, 0.103904800000),
+    517: (0.041120160000, 0.650306800000, 0.096667480000),
+    518: (0.047985040000, 0.670875200000, 0.089982720000),
+    519: (0.055378610000, 0.690842400000, 0.083845310000),
     520: (0.063270000000, 0.710000000000, 0.078249990000),
+    521: (0.071635010000, 0.728185200000, 0.073208990000),
+    522: (0.080462240000, 0.745463600000, 0.068678160000),
+    523: (0.089739960000, 0.761969400000, 0.064567840000),
+    524: (0.099456450000, 0.777836800000, 0.060788350000),
     525: (0.109600000000, 0.793200000000, 0.057250010000),
+    526: (0.120167400000, 0.808110400000, 0.053904350000),
+    527: (0.131114500000, 0.822496200000, 0.050746640000),
+    528: (0.142367900000, 0.836306800000, 0.047752760000),
+    529: (0.153854200000, 0.849491600000, 0.044898590000),
     530: (0.165500000000, 0.862000000000, 0.042160000000),
+    531: (0.177257100000, 0.873810800000, 0.039507280000),
+    532: (0.189140000000, 0.884962400000, 0.036935640000),
+    533: (0.201169400000, 0.895493600000, 0.034458360000),
+    534: (0.213365800000, 0.905443200000, 0.032088720000),
     535: (0.225749900000, 0.914850100000, 0.029840000000),
+    536: (0.238320900000, 0.923734800000, 0.027711810000),
+    537: (0.251066800000, 0.932092400000, 0.025694440000),
+    538: (0.263992200000, 0.939922600000, 0.023787160000),
+    539: (0.277101700000, 0.947225200000, 0.021989250000),
     540: (0.290400000000, 0.954000000000, 0.020300000000),
+    541: (0.303891200000, 0.960256100000, 0.018718050000),
+    542: (0.317572600000, 0.966007400000, 0.017240360000),
+    543: (0.331438400000, 0.971260600000, 0.015863640000),
+    544: (0.345482800000, 0.976022500000, 0.014584610000),
     545: (0.359700000000, 0.980300000000, 0.013400000000),
+    546: (0.374083900000, 0.984092400000, 0.012307230000),
+    547: (0.388639600000, 0.987418200000, 0.011301880000),
+    548: (0.403378400000, 0.990312800000, 0.010377920000),
+    549: (0.418311500000, 0.992811600000, 0.009529306000),
     550: (0.433449900000, 0.994950100000, 0.008749999000),
+    551: (0.448795300000, 0.996710800000, 0.008035200000),
+    552: (0.464336000000, 0.998098300000, 0.007381600000),
+    553: (0.480064000000, 0.999112000000, 0.006785400000),
+    554: (0.495971300000, 0.999748200000, 0.006242800000),
     555: (0.512050100000, 1.000000000000, 0.005749999000),
+    556: (0.528295900000, 0.999856700000, 0.005303600000),
+    557: (0.544691600000, 0.999304600000, 0.004899800000),
+    558: (0.561209400000, 0.998325500000, 0.004534200000),
+    559: (0.577821500000, 0.996898700000, 0.004202400000),
     560: (0.594500000000, 0.995000000000, 0.003900000000),
+    561: (0.611220900000, 0.992600500000, 0.003623200000),
+    562: (0.627975800000, 0.989742600000, 0.003370600000),
+    563: (0.644760200000, 0.986444400000, 0.003141400000),
+    564: (0.661569700000, 0.982724100000, 0.002934800000),
     565: (0.678400000000, 0.978600000000, 0.002749999000),
+    566: (0.695239200000, 0.974083700000, 0.002585200000),
+    567: (0.712058600000, 0.969171200000, 0.002438600000),
+    568: (0.728828400000, 0.963856800000, 0.002309400000),
+    569: (0.745518800000, 0.958134900000, 0.002196800000),
     570: (0.762100000000, 0.952000000000, 0.002100000000),
+    571: (0.778543200000, 0.945450400000, 0.002017733000),
+    572: (0.794825600000, 0.938499200000, 0.001948200000),
+    573: (0.810926400000, 0.931162800000, 0.001889800000),
+    574: (0.826824800000, 0.923457600000, 0.001840933000),
     575: (0.842500000000, 0.915400000000, 0.001800000000),
+    576: (0.857932500000, 0.907006400000, 0.001766267000),
+    577: (0.873081600000, 0.898277200000, 0.001737800000),
+    578: (0.887894400000, 0.889204800000, 0.001711200000),
+    579: (0.902318100000, 0.879781600000, 0.001683067000),
     580: (0.916300000000, 0.870000000000, 0.001650001000),
+    581: (0.929799500000, 0.859861300000, 0.001610133000),
+    582: (0.942798400000, 0.849392000000, 0.001564400000),
+    583: (0.955277600000, 0.838622000000, 0.001513600000),
+    584: (0.967217900000, 0.827581300000, 0.001458533000),
     585: (0.978600000000, 0.816300000000, 0.001400000000),
+    586: (0.989385600000, 0.804794700000, 0.001336667000),
+    587: (0.999548800000, 0.793082000000, 0.001270000000),
+    588: (1.009089200000, 0.781192000000, 0.001205000000),
+    589: (1.018006400000, 0.769154700000, 0.001146667000),
     590: (1.026300000000, 0.757000000000, 0.001100000000),
+    591: (1.033982700000, 0.744754100000, 0.001068800000),
+    592: (1.040986000000, 0.732422400000, 0.001049400000),
+    593: (1.047188000000, 0.720003600000, 0.001035600000),
+    594: (1.052466700000, 0.707496500000, 0.001021200000),
     595: (1.056700000000, 0.694900000000, 0.001000000000),
+    596: (1.059794400000, 0.682219200000, 0.000968640000),
+    597: (1.061799200000, 0.669471600000, 0.000929920000),
+    598: (1.062806800000, 0.656674400000, 0.000886880000),
+    599: (1.062909600000, 0.643844800000, 0.000842560000),
     600: (1.062200000000, 0.631000000000, 0.000800000000),
+    601: (1.060735200000, 0.618155500000, 0.000760960000),
+    602: (1.058443600000, 0.605314400000, 0.000723680000),
+    603: (1.055224400000, 0.592475600000, 0.000685920000),
+    604: (1.050976800000, 0.579637900000, 0.000645440000),
     605: (1.045600000000, 0.566800000000, 0.000600000000),
+    606: (1.039036900000, 0.553961100000, 0.000547866700),
+    607: (1.031360800000, 0.541137200000, 0.000491600000),
+    608: (1.022666200000, 0.528352800000, 0.000435400000),
+    609: (1.013047700000, 0.515632300000, 0.000383466700),
     610: (1.002600000000, 0.503000000000, 0.000340000000),
+    611: (0.991367500000, 0.490468800000, 0.000307253300),
+    612: (0.979331400000, 0.478030400000, 0.000283160000),
+    613: (0.966491600000, 0.465677600000, 0.000265440000),
+    614: (0.952847900000, 0.453403200000, 0.000251813300),
     615: (0.938400000000, 0.441200000000, 0.000240000000),
+    616: (0.923194000000, 0.429080000000, 0.000229546700),
+    617: (0.907244000000, 0.417036000000, 0.000220640000),
+    618: (0.890502000000, 0.405032000000, 0.000211960000),
+    619: (0.872920000000, 0.393032000000, 0.000202186700),
     620: (0.854449900000, 0.381000000000, 0.000190000000),
+    621: (0.835084000000, 0.368918400000, 0.000174213300),
+    622: (0.814946000000, 0.356827200000, 0.000155640000),
+    623: (0.794186000000, 0.344776800000, 0.000135960000),
+    624: (0.772954000000, 0.332817600000, 0.000116853300),
     625: (0.751400000000, 0.321000000000, 0.000100000000),
+    626: (0.729583600000, 0.309338100000, 0.000086133330),
+    627: (0.707588800000, 0.297850400000, 0.000074600000),
+    628: (0.685602200000, 0.286593600000, 0.000065000000),
+    629: (0.663810400000, 0.275624500000, 0.000056933330),
     630: (0.642400000000, 0.265000000000, 0.000049999990),
+    631: (0.621514900000, 0.254763200000, 0.000044160000),
+    632: (0.601113800000, 0.244889600000, 0.000039480000),
+    633: (0.581105200000, 0.235334400000, 0.000035720000),
+    634: (0.561397700000, 0.226052800000, 0.000032640000),
     635: (0.541900000000, 0.217000000000, 0.000030000000),
+    636: (0.522599500000, 0.208161600000, 0.000027653330),
+    637: (0.503546400000, 0.199548800000, 0.000025560000),
+    638: (0.484743600000, 0.191155200000, 0.000023640000),
+    639: (0.466193900000, 0.182974400000, 0.000021813330),
     640: (0.447900000000, 0.175000000000, 0.000020000000),
+    641: (0.429861300000, 0.167223500000, 0.000018133330),
+    642: (0.412098000000, 0.159646400000, 0.000016200000),
+    643: (0.394644000000, 0.152277600000, 0.000014200000),
+    644: (0.377533300000, 0.145125900000, 0.000012133330),
     645: (0.360800000000, 0.138200000000, 0.000010000000),
+    646: (0.344456300000, 0.131500300000, 0.000007733333),
+    647: (0.328516800000, 0.125024800000, 0.000005400000),
+    648: (0.313019200000, 0.118779200000, 0.000003200000),
+    649: (0.298001100000, 0.112769100000, 0.000001333333),
     650: (0.283500000000, 0.107000000000, 0.000000000000),
+    651: (0.269544800000, 0.101476200000, 0.000000000000),
+    652: (0.256118400000, 0.096188640000, 0.000000000000),
+    653: (0.243189600000, 0.091122960000, 0.000000000000),
+    654: (0.230727200000, 0.086264850000, 0.000000000000),
     655: (0.218700000000, 0.081600000000, 0.000000000000),
+    656: (0.207097100000, 0.077120640000, 0.000000000000),
+    657: (0.195923200000, 0.072825520000, 0.000000000000),
+    658: (0.185170800000, 0.068710080000, 0.000000000000),
+    659: (0.174832300000, 0.064769760000, 0.000000000000),
     660: (0.164900000000, 0.061000000000, 0.000000000000),
+    661: (0.155366700000, 0.057396210000, 0.000000000000),
+    662: (0.146230000000, 0.053955040000, 0.000000000000),
+    663: (0.137490000000, 0.050673760000, 0.000000000000),
+    664: (0.129146700000, 0.047549650000, 0.000000000000),
     665: (0.121200000000, 0.044580000000, 0.000000000000),
+    666: (0.113639700000, 0.041758720000, 0.000000000000),
+    667: (0.106465000000, 0.039084960000, 0.000000000000),
+    668: (0.099690440000, 0.036563840000, 0.000000000000),
+    669: (0.093330610000, 0.034200480000, 0.000000000000),
     670: (0.087400000000, 0.032000000000, 0.000000000000),
+    671: (0.081900960000, 0.029962610000, 0.000000000000),
+    672: (0.076804280000, 0.028076640000, 0.000000000000),
+    673: (0.072077120000, 0.026329360000, 0.000000000000),
+    674: (0.067686640000, 0.024708050000, 0.000000000000),
     675: (0.063600000000, 0.023200000000, 0.000000000000),
+    676: (0.059806850000, 0.021800770000, 0.000000000000),
+    677: (0.056282160000, 0.020501120000, 0.000000000000),
+    678: (0.052971040000, 0.019281080000, 0.000000000000),
+    679: (0.049818610000, 0.018120690000, 0.000000000000),
     680: (0.046770000000, 0.017000000000, 0.000000000000),
+    681: (0.043784050000, 0.015903790000, 0.000000000000),
+    682: (0.040875360000, 0.014837180000, 0.000000000000),
+    683: (0.038072640000, 0.013810680000, 0.000000000000),
+    684: (0.035404610000, 0.012834780000, 0.000000000000),
     685: (0.032900000000, 0.011920000000, 0.000000000000),
+    686: (0.030564190000, 0.011068310000, 0.000000000000),
+    687: (0.028380560000, 0.010273390000, 0.000000000000),
+    688: (0.026344840000, 0.009533311000, 0.000000000000),
+    689: (0.024452750000, 0.008846157000, 0.000000000000),
     690: (0.022700000000, 0.008210000000, 0.000000000000),
+    691: (0.021084290000, 0.007623781000, 0.000000000000),
+    692: (0.019599880000, 0.007085424000, 0.000000000000),
+    693: (0.018237320000, 0.006591476000, 0.000000000000),
+    694: (0.016987170000, 0.006138485000, 0.000000000000),
     695: (0.015840000000, 0.005723000000, 0.000000000000),
+    696: (0.014790640000, 0.005343059000, 0.000000000000),
+    697: (0.013831320000, 0.004995796000, 0.000000000000),
+    698: (0.012948680000, 0.004676404000, 0.000000000000),
+    699: (0.012129200000, 0.004380075000, 0.000000000000),
     700: (0.011359160000, 0.004102000000, 0.000000000000),
+    701: (0.010629350000, 0.003838453000, 0.000000000000),
+    702: (0.009938846000, 0.003589099000, 0.000000000000),
+    703: (0.009288422000, 0.003354219000, 0.000000000000),
+    704: (0.008678854000, 0.003134093000, 0.000000000000),
     705: (0.008110916000, 0.002929000000, 0.000000000000),
+    706: (0.007582388000, 0.002738139000, 0.000000000000),
+    707: (0.007088746000, 0.002559876000, 0.000000000000),
+    708: (0.006627313000, 0.002393244000, 0.000000000000),
+    709: (0.006195408000, 0.002237275000, 0.000000000000),
     710: (0.005790346000, 0.002091000000, 0.000000000000),
+    711: (0.005409826000, 0.001953587000, 0.000000000000),
+    712: (0.005052583000, 0.001824580000, 0.000000000000),
+    713: (0.004717512000, 0.001703580000, 0.000000000000),
+    714: (0.004403507000, 0.001590187000, 0.000000000000),
     715: (0.004109457000, 0.001484000000, 0.000000000000),
+    716: (0.003833913000, 0.001384496000, 0.000000000000),
+    717: (0.003575748000, 0.001291268000, 0.000000000000),
+    718: (0.003334342000, 0.001204092000, 0.000000000000),
+    719: (0.003109075000, 0.001122744000, 0.000000000000),
     720: (0.002899327000, 0.001047000000, 0.000000000000),
+    721: (0.002704348000, 0.000976589600, 0.000000000000),
+    722: (0.002523020000, 0.000911108800, 0.000000000000),
+    723: (0.002354168000, 0.000850133200, 0.000000000000),
+    724: (0.002196616000, 0.000793238400, 0.000000000000),
     725: (0.002049190000, 0.000740000000, 0.000000000000),
+    726: (0.001910960000, 0.000690082700, 0.000000000000),
+    727: (0.001781438000, 0.000643310000, 0.000000000000),
+    728: (0.001660110000, 0.000599496000, 0.000000000000),
+    729: (0.001546459000, 0.000558454700, 0.000000000000),
     730: (0.001439971000, 0.000520000000, 0.000000000000),
+    731: (0.001340042000, 0.000483913600, 0.000000000000),
+    732: (0.001246275000, 0.000450052800, 0.000000000000),
+    733: (0.001158471000, 0.000418345200, 0.000000000000),
+    734: (0.001076430000, 0.000388718400, 0.000000000000),
     735: (0.000999949300, 0.000361100000, 0.000000000000),
+    736: (0.000928735800, 0.000335383500, 0.000000000000),
+    737: (0.000862433200, 0.000311440400, 0.000000000000),
+    738: (0.000800750300, 0.000289165600, 0.000000000000),
+    739: (0.000743396000, 0.000268453900, 0.000000000000),
     740: (0.000690078600, 0.000249200000, 0.000000000000),
+    741: (0.000640515600, 0.000231301900, 0.000000000000),
+    742: (0.000594502100, 0.000214685600, 0.000000000000),
+    743: (0.000551864600, 0.000199288400, 0.000000000000),
+    744: (0.000512429000, 0.000185047500, 0.000000000000),
     745: (0.000476021300, 0.000171900000, 0.000000000000),
+    746: (0.000442453600, 0.000159778100, 0.000000000000),
+    747: (0.000411511700, 0.000148604400, 0.000000000000),
+    748: (0.000382981400, 0.000138301600, 0.000000000000),
+    749: (0.000356649100, 0.000128792500, 0.000000000000),
     750: (0.000332301100, 0.000120000000, 0.000000000000),
+    751: (0.000309758600, 0.000111859500, 0.000000000000),
+    752: (0.000288887100, 0.000104322400, 0.000000000000),
+    753: (0.000269539400, 0.000097335600, 0.000000000000),
+    754: (0.000251568200, 0.000090845870, 0.000000000000),
     755: (0.000234826100, 0.000084800000, 0.000000000000),
+    756: (0.000219171000, 0.000079146670, 0.000000000000),
+    757: (0.000204525800, 0.000073858000, 0.000000000000),
+    758: (0.000190840500, 0.000068916000, 0.000000000000),
+    759: (0.000178065400, 0.000064302670, 0.000000000000),
     760: (0.000166150500, 0.000060000000, 0.000000000000),
+    761: (0.000155023600, 0.000055981870, 0.000000000000),
+    762: (0.000144621900, 0.000052225600, 0.000000000000),
+    763: (0.000134909800, 0.000048718400, 0.000000000000),
+    764: (0.000125852000, 0.000045447470, 0.000000000000),
     765: (0.000117413000, 0.000042400000, 0.000000000000),
+    766: (0.000109551500, 0.000039561040, 0.000000000000),
+    767: (0.000102224500, 0.000036915120, 0.000000000000),
+    768: (0.000095394450, 0.000034448680, 0.000000000000),
+    769: (0.000089023900, 0.000032148160, 0.000000000000),
     770: (0.000083075270, 0.000030000000, 0.000000000000),
+    771: (0.000077512690, 0.000027991250, 0.000000000000),
+    772: (0.000072313040, 0.000026113560, 0.000000000000),
+    773: (0.000067457780, 0.000024360240, 0.000000000000),
+    774: (0.000062928440, 0.000022724610, 0.000000000000),
     775: (0.000058706520, 0.000021200000, 0.000000000000),
+    776: (0.000054770280, 0.000019778550, 0.000000000000),
+    777: (0.000051099180, 0.000018452850, 0.000000000000),
+    778: (0.000047676540, 0.000017216870, 0.000000000000),
+    779: (0.000044485670, 0.000016064590, 0.000000000000),
     780: (0.000041509940, 0.000014990000, 0.000000000000),
+    781: (0.000038733240, 0.000013987280, 0.000000000000),
+    782: (0.000036142030, 0.000013051550, 0.000000000000),
+    783: (0.000033723520, 0.000012178180, 0.000000000000),
+    784: (0.000031464870, 0.000011362540, 0.000000000000),
     785: (0.000029353260, 0.000010600000, 0.000000000000),
+    786: (0.000027375730, 0.000009885877, 0.000000000000),
+    787: (0.000025524330, 0.000009217304, 0.000000000000),
+    788: (0.000023793760, 0.000008592362, 0.000000000000),
+    789: (0.000022178700, 0.000008009133, 0.000000000000),
     790: (0.000020673830, 0.000007465700, 0.000000000000),
+    791: (0.000019272260, 0.000006959567, 0.000000000000),
+    792: (0.000017966400, 0.000006487995, 0.000000000000),
+    793: (0.000016749910, 0.000006048699, 0.000000000000),
+    794: (0.000015616480, 0.000005639396, 0.000000000000),
     795: (0.000014559770, 0.000005257800, 0.000000000000),
+    796: (0.000013573870, 0.000004901771, 0.000000000000),
+    797: (0.000012654360, 0.000004569720, 0.000000000000),
+    798: (0.000011797230, 0.000004260194, 0.000000000000),
+    799: (0.000010998440, 0.000003971739, 0.000000000000),
     800: (0.000010253980, 0.000003702900, 0.000000000000),
+    801: (0.000009559646, 0.000003452163, 0.000000000000),
+    802: (0.000008912044, 0.000003218302, 0.000000000000),
+    803: (0.000008308358, 0.000003000300, 0.000000000000),
+    804: (0.000007745769, 0.000002797139, 0.000000000000),
     805: (0.000007221456, 0.000002607800, 0.000000000000),
+    806: (0.000006732475, 0.000002431220, 0.000000000000),
+    807: (0.000006276423, 0.000002266531, 0.000000000000),
+    808: (0.000005851304, 0.000002113013, 0.000000000000),
+    809: (0.000005455118, 0.000001969943, 0.000000000000),
     810: (0.000005085868, 0.000001836600, 0.000000000000),
+    811: (0.000004741466, 0.000001712230, 0.000000000000),
+    812: (0.000004420236, 0.000001596228, 0.000000000000),
+    813: (0.000004120783, 0.000001488090, 0.000000000000),
+    814: (0.000003841716, 0.000001387314, 0.000000000000),
     815: (0.000003581652, 0.000001293400, 0.000000000000),
+    816: (0.000003339127, 0.000001205820, 0.000000000000),
+    817: (0.000003112949, 0.000001124143, 0.000000000000),
+    818: (0.000002902121, 0.000001048009, 0.000000000000),
+    819: (0.000002705645, 0.000000977058, 0.000000000000),
     820: (0.000002522525, 0.000000910930, 0.000000000000),
+    821: (0.000002351726, 0.000000849251, 0.000000000000),
+    822: (0.000002192415, 0.000000791721, 0.000000000000),
+    823: (0.000002043902, 0.000000738090, 0.000000000000),
+    824: (0.000001905497, 0.000000688110, 0.000000000000),
     825: (0.000001776509, 0.000000641530, 0.000000000000),
+    826: (0.000001656215, 0.000000598090, 0.000000000000),
+    827: (0.000001544022, 0.000000557575, 0.000000000000),
+    828: (0.000001439440, 0.000000519808, 0.000000000000),
+    829: (0.000001341977, 0.000000484612, 0.000000000000),
     830: (0.000001251141, 0.000000451810, 0.000000000000)
 }
 
@@ -104,98 +480,474 @@
 # http://www-cvrl.ucsd.edu/cmfs.htm
 cie_1964_10deg = {
     360: (0.000000122200, 0.000000013398, 0.000000535027),
+    361: (0.000000185138, 0.000000020294, 0.000000810720),
+    362: (0.000000278830, 0.000000030560, 0.000001221200),
+    363: (0.000000417470, 0.000000045740, 0.000001828700),
+    364: (0.000000621330, 0.000000068050, 0.000002722200),
     365: (0.000000919270, 0.000000100650, 0.000004028300),
+    366: (0.000001351980, 0.000000147980, 0.000005925700),
+    367: (0.000001976540, 0.000000216270, 0.000008665100),
+    368: (0.000002872500, 0.000000314200, 0.000012596000),
+    369: (0.000004149500, 0.000000453700, 0.000018201000),
     370: (0.000005958600, 0.000000651100, 0.000026143700),
+    371: (0.000008505600, 0.000000928800, 0.000037330000),
+    372: (0.000012068600, 0.000001317500, 0.000052987000),
+    373: (0.000017022600, 0.000001857200, 0.000074764000),
+    374: (0.000023868000, 0.000002602000, 0.000104870000),
     375: (0.000033266000, 0.000003625000, 0.000146220000),
+    376: (0.000046087000, 0.000005019000, 0.000202660000),
+    377: (0.000063472000, 0.000006907000, 0.000279230000),
+    378: (0.000086892000, 0.000009449000, 0.000382450000),
+    379: (0.000118246000, 0.000012848000, 0.000520720000),
     380: (0.000159952000, 0.000017364000, 0.000704776000),
+    381: (0.000215080000, 0.000023327000, 0.000948230000),
+    382: (0.000287490000, 0.000031150000, 0.001268200000),
+    383: (0.000381990000, 0.000041350000, 0.001686100000),
+    384: (0.000504550000, 0.000054560000, 0.002228500000),
     385: (0.000662440000, 0.000071560000, 0.002927800000),
+    386: (0.000864500000, 0.000093300000, 0.003823700000),
+    387: (0.001121500000, 0.000120870000, 0.004964200000),
+    388: (0.001446160000, 0.000155640000, 0.006406700000),
+    389: (0.001853590000, 0.000199200000, 0.008219300000),
     390: (0.002361600000, 0.000253400000, 0.010482200000),
+    391: (0.002990600000, 0.000320200000, 0.013289000000),
+    392: (0.003764500000, 0.000402400000, 0.016747000000),
+    393: (0.004710200000, 0.000502300000, 0.020980000000),
+    394: (0.005858100000, 0.000623200000, 0.026127000000),
     395: (0.007242300000, 0.000768500000, 0.032344000000),
+    396: (0.008899600000, 0.000941700000, 0.039802000000),
+    397: (0.010870900000, 0.001147800000, 0.048691000000),
+    398: (0.013198900000, 0.001390300000, 0.059210000000),
+    399: (0.015929200000, 0.001674000000, 0.071576000000),
     400: (0.019109700000, 0.002004400000, 0.086010900000),
+    401: (0.022788000000, 0.002386000000, 0.102740000000),
+    402: (0.027011000000, 0.002822000000, 0.122000000000),
+    403: (0.031829000000, 0.003319000000, 0.144020000000),
+    404: (0.037278000000, 0.003880000000, 0.168990000000),
     405: (0.043400000000, 0.004509000000, 0.197120000000),
+    406: (0.050223000000, 0.005209000000, 0.228570000000),
+    407: (0.057764000000, 0.005985000000, 0.263470000000),
+    408: (0.066038000000, 0.006833000000, 0.301900000000),
+    409: (0.075033000000, 0.007757000000, 0.343870000000),
     410: (0.084736000000, 0.008756000000, 0.389366000000),
+    411: (0.095041000000, 0.009816000000, 0.437970000000),
+    412: (0.105836000000, 0.010918000000, 0.489220000000),
+    413: (0.117066000000, 0.012058000000, 0.542900000000),
+    414: (0.128682000000, 0.013237000000, 0.598810000000),
     415: (0.140638000000, 0.014456000000, 0.656760000000),
+    416: (0.152893000000, 0.015717000000, 0.716580000000),
+    417: (0.165416000000, 0.017025000000, 0.778120000000),
+    418: (0.178191000000, 0.018399000000, 0.841310000000),
+    419: (0.191214000000, 0.019848000000, 0.906110000000),
     420: (0.204492000000, 0.021391000000, 0.972542000000),
+    421: (0.217650000000, 0.022992000000, 1.038900000000),
+    422: (0.230267000000, 0.024598000000, 1.103100000000),
+    423: (0.242311000000, 0.026213000000, 1.165100000000),
+    424: (0.253793000000, 0.027841000000, 1.224900000000),
     425: (0.264737000000, 0.029497000000, 1.282500000000),
+    426: (0.275195000000, 0.031195000000, 1.338200000000),
+    427: (0.285301000000, 0.032927000000, 1.392600000000),
+    428: (0.295143000000, 0.034738000000, 1.446100000000),
+    429: (0.304869000000, 0.036654000000, 1.499400000000),
     430: (0.314679000000, 0.038676000000, 1.553480000000),
+    431: (0.324355000000, 0.040792000000, 1.607200000000),
+    432: (0.333570000000, 0.042946000000, 1.658900000000),
+    433: (0.342243000000, 0.045114000000, 1.708200000000),
+    434: (0.350312000000, 0.047333000000, 1.754800000000),
     435: (0.357719000000, 0.049602000000, 1.798500000000),
+    436: (0.364482000000, 0.051934000000, 1.839200000000),
+    437: (0.370493000000, 0.054337000000, 1.876600000000),
+    438: (0.375727000000, 0.056822000000, 1.910500000000),
+    439: (0.380158000000, 0.059399000000, 1.940800000000),
     440: (0.383734000000, 0.062077000000, 1.967280000000),
+    441: (0.386327000000, 0.064737000000, 1.989100000000),
+    442: (0.387858000000, 0.067285000000, 2.005700000000),
+    443: (0.388396000000, 0.069764000000, 2.017400000000),
+    444: (0.387978000000, 0.072218000000, 2.024400000000),
     445: (0.386726000000, 0.074704000000, 2.027300000000),
+    446: (0.384696000000, 0.077272000000, 2.026400000000),
+    447: (0.382006000000, 0.079979000000, 2.022300000000),
+    448: (0.378709000000, 0.082874000000, 2.015300000000),
+    449: (0.374915000000, 0.086000000000, 2.006000000000),
     450: (0.370702000000, 0.089456000000, 1.994800000000),
+    451: (0.366089000000, 0.092947000000, 1.981400000000),
+    452: (0.361045000000, 0.096275000000, 1.965300000000),
+    453: (0.355518000000, 0.099535000000, 1.946400000000),
+    454: (0.349486000000, 0.102829000000, 1.924800000000),
     455: (0.342957000000, 0.106256000000, 1.900700000000),
+    456: (0.335893000000, 0.109901000000, 1.874100000000),
+    457: (0.328284000000, 0.113835000000, 1.845100000000),
+    458: (0.320150000000, 0.118167000000, 1.813900000000),
+    459: (0.311475000000, 0.122932000000, 1.780600000000),
     460: (0.302273000000, 0.128201000000, 1.745370000000),
+    461: (0.292858000000, 0.133457000000, 1.709100000000),
+    462: (0.283502000000, 0.138323000000, 1.672300000000),
+    463: (0.274044000000, 0.143042000000, 1.634700000000),
+    464: (0.264263000000, 0.147787000000, 1.595600000000),
     465: (0.254085000000, 0.152761000000, 1.554900000000),
+    466: (0.243392000000, 0.158102000000, 1.512200000000),
+    467: (0.232187000000, 0.163941000000, 1.467300000000),
+    468: (0.220488000000, 0.170362000000, 1.419900000000),
+    469: (0.208198000000, 0.177425000000, 1.370000000000),
     470: (0.195618000000, 0.185190000000, 1.317560000000),
+    471: (0.183034000000, 0.193025000000, 1.262400000000),
+    472: (0.170222000000, 0.200313000000, 1.205000000000),
+    473: (0.157348000000, 0.207156000000, 1.146600000000),
+    474: (0.144650000000, 0.213644000000, 1.088000000000),
     475: (0.132349000000, 0.219940000000, 1.030200000000),
+    476: (0.120584000000, 0.226170000000, 0.973830000000),
+    477: (0.109456000000, 0.232467000000, 0.919430000000),
+    478: (0.099042000000, 0.239025000000, 0.867460000000),
+    479: (0.089388000000, 0.245997000000, 0.818280000000),
     480: (0.080507000000, 0.253589000000, 0.772125000000),
+    481: (0.072034000000, 0.261876000000, 0.728290000000),
+    482: (0.063710000000, 0.270643000000, 0.686040000000),
+    483: (0.055694000000, 0.279645000000, 0.645530000000),
+    484: (0.048117000000, 0.288694000000, 0.606850000000),
     485: (0.041072000000, 0.297665000000, 0.570060000000),
+    486: (0.034642000000, 0.306469000000, 0.535220000000),
+    487: (0.028896000000, 0.315035000000, 0.502340000000),
+    488: (0.023876000000, 0.323335000000, 0.471400000000),
+    489: (0.019628000000, 0.331366000000, 0.442390000000),
     490: (0.016172000000, 0.339133000000, 0.415254000000),
+    491: (0.013300000000, 0.347860000000, 0.390024000000),
+    492: (0.010759000000, 0.358326000000, 0.366399000000),
+    493: (0.008542000000, 0.370001000000, 0.344015000000),
+    494: (0.006661000000, 0.382464000000, 0.322689000000),
     495: (0.005132000000, 0.395379000000, 0.302356000000),
+    496: (0.003982000000, 0.408482000000, 0.283036000000),
+    497: (0.003239000000, 0.421588000000, 0.264816000000),
+    498: (0.002934000000, 0.434619000000, 0.247848000000),
+    499: (0.003114000000, 0.447601000000, 0.232318000000),
     500: (0.003816000000, 0.460777000000, 0.218502000000),
+    501: (0.005095000000, 0.474340000000, 0.205851000000),
+    502: (0.006936000000, 0.488200000000, 0.193596000000),
+    503: (0.009299000000, 0.502340000000, 0.181736000000),
+    504: (0.012147000000, 0.516740000000, 0.170281000000),
     505: (0.015444000000, 0.531360000000, 0.159249000000),
+    506: (0.019156000000, 0.546190000000, 0.148673000000),
+    507: (0.023250000000, 0.561180000000, 0.138609000000),
+    508: (0.027690000000, 0.576290000000, 0.129096000000),
+    509: (0.032444000000, 0.591500000000, 0.120215000000),
     510: (0.037465000000, 0.606741000000, 0.112044000000),
+    511: (0.042956000000, 0.622150000000, 0.104710000000),
+    512: (0.049114000000, 0.637830000000, 0.098196000000),
+    513: (0.055920000000, 0.653710000000, 0.092361000000),
+    514: (0.063349000000, 0.669680000000, 0.087088000000),
     515: (0.071358000000, 0.685660000000, 0.082248000000),
+    516: (0.079901000000, 0.701550000000, 0.077744000000),
+    517: (0.088909000000, 0.717230000000, 0.073456000000),
+    518: (0.098293000000, 0.732570000000, 0.069268000000),
+    519: (0.107949000000, 0.747460000000, 0.065060000000),
     520: (0.117749000000, 0.761757000000, 0.060709000000),
+    521: (0.127839000000, 0.775340000000, 0.056457000000),
+    522: (0.138450000000, 0.788220000000, 0.052609000000),
+    523: (0.149516000000, 0.800460000000, 0.049122000000),
+    524: (0.161041000000, 0.812140000000, 0.045954000000),
     525: (0.172953000000, 0.823330000000, 0.043050000000),
+    526: (0.185209000000, 0.834120000000, 0.040368000000),
+    527: (0.197755000000, 0.844600000000, 0.037839000000),
+    528: (0.210538000000, 0.854870000000, 0.035384000000),
+    529: (0.223460000000, 0.865040000000, 0.032949000000),
     530: (0.236491000000, 0.875211000000, 0.030451000000),
+    531: (0.249633000000, 0.885370000000, 0.028029000000),
+    532: (0.262972000000, 0.895370000000, 0.025862000000),
+    533: (0.276515000000, 0.905150000000, 0.023920000000),
+    534: (0.290269000000, 0.914650000000, 0.022174000000),
     535: (0.304213000000, 0.923810000000, 0.020584000000),
+    536: (0.318361000000, 0.932550000000, 0.019127000000),
+    537: (0.332705000000, 0.940810000000, 0.017740000000),
+    538: (0.347232000000, 0.948520000000, 0.016403000000),
+    539: (0.361926000000, 0.955600000000, 0.015064000000),
     540: (0.376772000000, 0.961988000000, 0.013676000000),
+    541: (0.391683000000, 0.967540000000, 0.012308000000),
+    542: (0.406594000000, 0.972230000000, 0.011056000000),
+    543: (0.421539000000, 0.976170000000, 0.009915000000),
+    544: (0.436517000000, 0.979460000000, 0.008872000000),
     545: (0.451584000000, 0.982200000000, 0.007918000000),
+    546: (0.466782000000, 0.984520000000, 0.007030000000),
+    547: (0.482147000000, 0.986520000000, 0.006223000000),
+    548: (0.497738000000, 0.988320000000, 0.005453000000),
+    549: (0.513606000000, 0.990020000000, 0.004714000000),
     550: (0.529826000000, 0.991761000000, 0.003988000000),
+    551: (0.546440000000, 0.993530000000, 0.003289000000),
+    552: (0.563426000000, 0.995230000000, 0.002646000000),
+    553: (0.580726000000, 0.996770000000, 0.002063000000),
+    554: (0.598290000000, 0.998090000000, 0.001533000000),
     555: (0.616053000000, 0.999110000000, 0.001091000000),
+    556: (0.633948000000, 0.999770000000, 0.000711000000),
+    557: (0.651901000000, 1.000000000000, 0.000407000000),
+    558: (0.669824000000, 0.999710000000, 0.000184000000),
+    559: (0.687632000000, 0.998850000000, 0.000047000000),
     560: (0.705224000000, 0.997340000000, 0.000000000000),
+    561: (0.722773000000, 0.995260000000, 0.000000000000),
+    562: (0.740483000000, 0.992740000000, 0.000000000000),
+    563: (0.758273000000, 0.989750000000, 0.000000000000),
+    564: (0.776083000000, 0.986300000000, 0.000000000000),
     565: (0.793832000000, 0.982380000000, 0.000000000000),
+    566: (0.811436000000, 0.977980000000, 0.000000000000),
+    567: (0.828822000000, 0.973110000000, 0.000000000000),
+    568: (0.845879000000, 0.967740000000, 0.000000000000),
+    569: (0.862525000000, 0.961890000000, 0.000000000000),
     570: (0.878655000000, 0.955552000000, 0.000000000000),
+    571: (0.894208000000, 0.948601000000, 0.000000000000),
+    572: (0.909206000000, 0.940981000000, 0.000000000000),
+    573: (0.923672000000, 0.932798000000, 0.000000000000),
+    574: (0.937638000000, 0.924158000000, 0.000000000000),
     575: (0.951162000000, 0.915175000000, 0.000000000000),
+    576: (0.964283000000, 0.905954000000, 0.000000000000),
+    577: (0.977068000000, 0.896608000000, 0.000000000000),
+    578: (0.989590000000, 0.887249000000, 0.000000000000),
+    579: (1.001910000000, 0.877986000000, 0.000000000000),
     580: (1.014160000000, 0.868934000000, 0.000000000000),
+    581: (1.026500000000, 0.860164000000, 0.000000000000),
+    582: (1.038800000000, 0.851519000000, 0.000000000000),
+    583: (1.051000000000, 0.842963000000, 0.000000000000),
+    584: (1.062900000000, 0.834393000000, 0.000000000000),
     585: (1.074300000000, 0.825623000000, 0.000000000000),
+    586: (1.085200000000, 0.816764000000, 0.000000000000),
+    587: (1.095200000000, 0.807544000000, 0.000000000000),
+    588: (1.104200000000, 0.797947000000, 0.000000000000),
+    589: (1.112000000000, 0.787893000000, 0.000000000000),
     590: (1.118520000000, 0.777405000000, 0.000000000000),
+    591: (1.123800000000, 0.766490000000, 0.000000000000),
+    592: (1.128000000000, 0.755309000000, 0.000000000000),
+    593: (1.131100000000, 0.743845000000, 0.000000000000),
+    594: (1.133200000000, 0.732190000000, 0.000000000000),
     595: (1.134300000000, 0.720353000000, 0.000000000000),
+    596: (1.134300000000, 0.708281000000, 0.000000000000),
+    597: (1.133300000000, 0.696055000000, 0.000000000000),
+    598: (1.131200000000, 0.683621000000, 0.000000000000),
+    599: (1.128100000000, 0.671048000000, 0.000000000000),
     600: (1.123990000000, 0.658341000000, 0.000000000000),
+    601: (1.118900000000, 0.645545000000, 0.000000000000),
+    602: (1.112900000000, 0.632718000000, 0.000000000000),
+    603: (1.105900000000, 0.619815000000, 0.000000000000),
+    604: (1.098000000000, 0.606887000000, 0.000000000000),
     605: (1.089100000000, 0.593878000000, 0.000000000000),
+    606: (1.079200000000, 0.580781000000, 0.000000000000),
+    607: (1.068400000000, 0.567653000000, 0.000000000000),
+    608: (1.056700000000, 0.554490000000, 0.000000000000),
+    609: (1.044000000000, 0.541228000000, 0.000000000000),
     610: (1.030480000000, 0.527963000000, 0.000000000000),
+    611: (1.016000000000, 0.514634000000, 0.000000000000),
+    612: (1.000800000000, 0.501363000000, 0.000000000000),
+    613: (0.984790000000, 0.488124000000, 0.000000000000),
+    614: (0.968080000000, 0.474935000000, 0.000000000000),
     615: (0.950740000000, 0.461834000000, 0.000000000000),
+    616: (0.932800000000, 0.448823000000, 0.000000000000),
+    617: (0.914340000000, 0.435917000000, 0.000000000000),
+    618: (0.895390000000, 0.423153000000, 0.000000000000),
+    619: (0.876030000000, 0.410526000000, 0.000000000000),
     620: (0.856297000000, 0.398057000000, 0.000000000000),
+    621: (0.836350000000, 0.385835000000, 0.000000000000),
+    622: (0.816290000000, 0.373951000000, 0.000000000000),
+    623: (0.796050000000, 0.362311000000, 0.000000000000),
+    624: (0.775610000000, 0.350863000000, 0.000000000000),
     625: (0.754930000000, 0.339554000000, 0.000000000000),
+    626: (0.733990000000, 0.328309000000, 0.000000000000),
+    627: (0.712780000000, 0.317118000000, 0.000000000000),
+    628: (0.691290000000, 0.305936000000, 0.000000000000),
+    629: (0.669520000000, 0.294737000000, 0.000000000000),
     630: (0.647467000000, 0.283493000000, 0.000000000000),
+    631: (0.625110000000, 0.272222000000, 0.000000000000),
+    632: (0.602520000000, 0.260990000000, 0.000000000000),
+    633: (0.579890000000, 0.249877000000, 0.000000000000),
+    634: (0.557370000000, 0.238946000000, 0.000000000000),
     635: (0.535110000000, 0.228254000000, 0.000000000000),
+    636: (0.513240000000, 0.217853000000, 0.000000000000),
+    637: (0.491860000000, 0.207780000000, 0.000000000000),
+    638: (0.471080000000, 0.198072000000, 0.000000000000),
+    639: (0.450960000000, 0.188748000000, 0.000000000000),
     640: (0.431567000000, 0.179828000000, 0.000000000000),
+    641: (0.412870000000, 0.171285000000, 0.000000000000),
+    642: (0.394750000000, 0.163059000000, 0.000000000000),
+    643: (0.377210000000, 0.155151000000, 0.000000000000),
+    644: (0.360190000000, 0.147535000000, 0.000000000000),
     645: (0.343690000000, 0.140211000000, 0.000000000000),
+    646: (0.327690000000, 0.133170000000, 0.000000000000),
+    647: (0.312170000000, 0.126400000000, 0.000000000000),
+    648: (0.297110000000, 0.119892000000, 0.000000000000),
+    649: (0.282500000000, 0.113640000000, 0.000000000000),
     650: (0.268329000000, 0.107633000000, 0.000000000000),
+    651: (0.254590000000, 0.101870000000, 0.000000000000),
+    652: (0.241300000000, 0.096347000000, 0.000000000000),
+    653: (0.228480000000, 0.091063000000, 0.000000000000),
+    654: (0.216140000000, 0.086010000000, 0.000000000000),
     655: (0.204300000000, 0.081187000000, 0.000000000000),
+    656: (0.192950000000, 0.076583000000, 0.000000000000),
+    657: (0.182110000000, 0.072198000000, 0.000000000000),
+    658: (0.171770000000, 0.068024000000, 0.000000000000),
+    659: (0.161920000000, 0.064052000000, 0.000000000000),
     660: (0.152568000000, 0.060281000000, 0.000000000000),
+    661: (0.143670000000, 0.056697000000, 0.000000000000),
+    662: (0.135200000000, 0.053292000000, 0.000000000000),
+    663: (0.127130000000, 0.050059000000, 0.000000000000),
+    664: (0.119480000000, 0.046998000000, 0.000000000000),
     665: (0.112210000000, 0.044096000000, 0.000000000000),
+    666: (0.105310000000, 0.041345000000, 0.000000000000),
+    667: (0.098786000000, 0.038750700000, 0.000000000000),
+    668: (0.092610000000, 0.036297800000, 0.000000000000),
+    669: (0.086773000000, 0.033983200000, 0.000000000000),
     670: (0.081260600000, 0.031800400000, 0.000000000000),
+    671: (0.076048000000, 0.029739500000, 0.000000000000),
+    672: (0.071114000000, 0.027791800000, 0.000000000000),
+    673: (0.066454000000, 0.025955100000, 0.000000000000),
+    674: (0.062062000000, 0.024226300000, 0.000000000000),
     675: (0.057930000000, 0.022601700000, 0.000000000000),
+    676: (0.054050000000, 0.021077900000, 0.000000000000),
+    677: (0.050412000000, 0.019650500000, 0.000000000000),
+    678: (0.047006000000, 0.018315300000, 0.000000000000),
+    679: (0.043823000000, 0.017068600000, 0.000000000000),
     680: (0.040850800000, 0.015905100000, 0.000000000000),
+    681: (0.038072000000, 0.014818300000, 0.000000000000),
+    682: (0.035468000000, 0.013800800000, 0.000000000000),
+    683: (0.033031000000, 0.012849500000, 0.000000000000),
+    684: (0.030753000000, 0.011960700000, 0.000000000000),
     685: (0.028623000000, 0.011130300000, 0.000000000000),
+    686: (0.026635000000, 0.010355500000, 0.000000000000),
+    687: (0.024781000000, 0.009633200000, 0.000000000000),
+    688: (0.023052000000, 0.008959900000, 0.000000000000),
+    689: (0.021441000000, 0.008332400000, 0.000000000000),
     690: (0.019941300000, 0.007748800000, 0.000000000000),
+    691: (0.018544000000, 0.007204600000, 0.000000000000),
+    692: (0.017241000000, 0.006697500000, 0.000000000000),
+    693: (0.016027000000, 0.006225100000, 0.000000000000),
+    694: (0.014896000000, 0.005785000000, 0.000000000000),
     695: (0.013842000000, 0.005375100000, 0.000000000000),
+    696: (0.012862000000, 0.004994100000, 0.000000000000),
+    697: (0.011949000000, 0.004639200000, 0.000000000000),
+    698: (0.011100000000, 0.004309300000, 0.000000000000),
+    699: (0.010311000000, 0.004002800000, 0.000000000000),
     700: (0.009576880000, 0.003717740000, 0.000000000000),
+    701: (0.008894000000, 0.003452620000, 0.000000000000),
+    702: (0.008258100000, 0.003205830000, 0.000000000000),
+    703: (0.007666400000, 0.002976230000, 0.000000000000),
+    704: (0.007116300000, 0.002762810000, 0.000000000000),
     705: (0.006605200000, 0.002564560000, 0.000000000000),
+    706: (0.006130600000, 0.002380480000, 0.000000000000),
+    707: (0.005690300000, 0.002209710000, 0.000000000000),
+    708: (0.005281900000, 0.002051320000, 0.000000000000),
+    709: (0.004903300000, 0.001904490000, 0.000000000000),
     710: (0.004552630000, 0.001768470000, 0.000000000000),
+    711: (0.004227500000, 0.001642360000, 0.000000000000),
+    712: (0.003925800000, 0.001525350000, 0.000000000000),
+    713: (0.003645700000, 0.001416720000, 0.000000000000),
+    714: (0.003385900000, 0.001315950000, 0.000000000000),
     715: (0.003144700000, 0.001222390000, 0.000000000000),
+    716: (0.002920800000, 0.001135550000, 0.000000000000),
+    717: (0.002713000000, 0.001054940000, 0.000000000000),
+    718: (0.002520200000, 0.000980140000, 0.000000000000),
+    719: (0.002341100000, 0.000910660000, 0.000000000000),
     720: (0.002174960000, 0.000846190000, 0.000000000000),
+    721: (0.002020600000, 0.000786290000, 0.000000000000),
+    722: (0.001877300000, 0.000730680000, 0.000000000000),
+    723: (0.001744100000, 0.000678990000, 0.000000000000),
+    724: (0.001620500000, 0.000631010000, 0.000000000000),
     725: (0.001505700000, 0.000586440000, 0.000000000000),
+    726: (0.001399200000, 0.000545110000, 0.000000000000),
+    727: (0.001300400000, 0.000506720000, 0.000000000000),
+    728: (0.001208700000, 0.000471110000, 0.000000000000),
+    729: (0.001123600000, 0.000438050000, 0.000000000000),
     730: (0.001044760000, 0.000407410000, 0.000000000000),
+    731: (0.000971560000, 0.000378962000, 0.000000000000),
+    732: (0.000903600000, 0.000352543000, 0.000000000000),
+    733: (0.000840480000, 0.000328001000, 0.000000000000),
+    734: (0.000781870000, 0.000305208000, 0.000000000000),
     735: (0.000727450000, 0.000284041000, 0.000000000000),
+    736: (0.000676900000, 0.000264375000, 0.000000000000),
+    737: (0.000629960000, 0.000246109000, 0.000000000000),
+    738: (0.000586370000, 0.000229143000, 0.000000000000),
+    739: (0.000545870000, 0.000213376000, 0.000000000000),
     740: (0.000508258000, 0.000198730000, 0.000000000000),
+    741: (0.000473300000, 0.000185115000, 0.000000000000),
+    742: (0.000440800000, 0.000172454000, 0.000000000000),
+    743: (0.000410580000, 0.000160678000, 0.000000000000),
+    744: (0.000382490000, 0.000149730000, 0.000000000000),
     745: (0.000356380000, 0.000139550000, 0.000000000000),
+    746: (0.000332110000, 0.000130086000, 0.000000000000),
+    747: (0.000309550000, 0.000121290000, 0.000000000000),
+    748: (0.000288580000, 0.000113106000, 0.000000000000),
+    749: (0.000269090000, 0.000105501000, 0.000000000000),
     750: (0.000250969000, 0.000098428000, 0.000000000000),
+    751: (0.000234130000, 0.000091853000, 0.000000000000),
+    752: (0.000218470000, 0.000085738000, 0.000000000000),
+    753: (0.000203910000, 0.000080048000, 0.000000000000),
+    754: (0.000190350000, 0.000074751000, 0.000000000000),
     755: (0.000177730000, 0.000069819000, 0.000000000000),
+    756: (0.000165970000, 0.000065222000, 0.000000000000),
+    757: (0.000155020000, 0.000060939000, 0.000000000000),
+    758: (0.000144800000, 0.000056942000, 0.000000000000),
+    759: (0.000135280000, 0.000053217000, 0.000000000000),
     760: (0.000126390000, 0.000049737000, 0.000000000000),
+    761: (0.000118100000, 0.000046491000, 0.000000000000),
+    762: (0.000110370000, 0.000043464000, 0.000000000000),
+    763: (0.000103150000, 0.000040635000, 0.000000000000),
+    764: (0.000096427000, 0.000038000000, 0.000000000000),
     765: (0.000090151000, 0.000035540500, 0.000000000000),
+    766: (0.000084294000, 0.000033244800, 0.000000000000),
+    767: (0.000078830000, 0.000031100600, 0.000000000000),
+    768: (0.000073729000, 0.000029099000, 0.000000000000),
+    769: (0.000068969000, 0.000027230700, 0.000000000000),
     770: (0.000064525800, 0.000025486000, 0.000000000000),
+    771: (0.000060376000, 0.000023856100, 0.000000000000),
+    772: (0.000056500000, 0.000022333200, 0.000000000000),
+    773: (0.000052880000, 0.000020910400, 0.000000000000),
+    774: (0.000049498000, 0.000019580800, 0.000000000000),
     775: (0.000046339000, 0.000018338400, 0.000000000000),
+    776: (0.000043389000, 0.000017177700, 0.000000000000),
+    777: (0.000040634000, 0.000016093400, 0.000000000000),
+    778: (0.000038060000, 0.000015080000, 0.000000000000),
+    779: (0.000035657000, 0.000014133600, 0.000000000000),
     780: (0.000033411700, 0.000013249000, 0.000000000000),
+    781: (0.000031315000, 0.000012422600, 0.000000000000),
+    782: (0.000029355000, 0.000011649900, 0.000000000000),
+    783: (0.000027524000, 0.000010927700, 0.000000000000),
+    784: (0.000025811000, 0.000010251900, 0.000000000000),
     785: (0.000024209000, 0.000009619600, 0.000000000000),
+    786: (0.000022711000, 0.000009028100, 0.000000000000),
+    787: (0.000021308000, 0.000008474000, 0.000000000000),
+    788: (0.000019994000, 0.000007954800, 0.000000000000),
+    789: (0.000018764000, 0.000007468600, 0.000000000000),
     790: (0.000017611500, 0.000007012800, 0.000000000000),
+    791: (0.000016532000, 0.000006585800, 0.000000000000),
+    792: (0.000015521000, 0.000006185700, 0.000000000000),
+    793: (0.000014574000, 0.000005810700, 0.000000000000),
+    794: (0.000013686000, 0.000005459000, 0.000000000000),
     795: (0.000012855000, 0.000005129800, 0.000000000000),
+    796: (0.000012075000, 0.000004820600, 0.000000000000),
+    797: (0.000011345000, 0.000004531200, 0.000000000000),
+    798: (0.000010659000, 0.000004259100, 0.000000000000),
+    799: (0.000010017000, 0.000004004200, 0.000000000000),
     800: (0.000009413630, 0.000003764730, 0.000000000000),
+    801: (0.000008847900, 0.000003539950, 0.000000000000),
+    802: (0.000008317100, 0.000003329140, 0.000000000000),
+    803: (0.000007819000, 0.000003131150, 0.000000000000),
+    804: (0.000007351600, 0.000002945290, 0.000000000000),
     805: (0.000006913000, 0.000002770810, 0.000000000000),
+    806: (0.000006501500, 0.000002607050, 0.000000000000),
+    807: (0.000006115300, 0.000002453290, 0.000000000000),
+    808: (0.000005752900, 0.000002308940, 0.000000000000),
+    809: (0.000005412700, 0.000002173380, 0.000000000000),
     810: (0.000005093470, 0.000002046130, 0.000000000000),
+    811: (0.000004793800, 0.000001926620, 0.000000000000),
+    812: (0.000004512500, 0.000001814400, 0.000000000000),
+    813: (0.000004248300, 0.000001708950, 0.000000000000),
+    814: (0.000004000200, 0.000001609880, 0.000000000000),
     815: (0.000003767100, 0.000001516770, 0.000000000000),
+    816: (0.000003548000, 0.000001429210, 0.000000000000),
+    817: (0.000003342100, 0.000001346860, 0.000000000000),
+    818: (0.000003148500, 0.000001269450, 0.000000000000),
+    819: (0.000002966500, 0.000001196620, 0.000000000000),
     820: (0.000002795310, 0.000001128090, 0.000000000000),
+    821: (0.000002634500, 0.000001063680, 0.000000000000),
+    822: (0.000002483400, 0.000001003130, 0.000000000000),
+    823: (0.000002341400, 0.000000946220, 0.000000000000),
+    824: (0.000002207800, 0.000000892630, 0.000000000000),
     825: (0.000002082000, 0.000000842160, 0.000000000000),
+    826: (0.000001963600, 0.000000794640, 0.000000000000),
+    827: (0.000001851900, 0.000000749780, 0.000000000000),
+    828: (0.000001746500, 0.000000707440, 0.000000000000),
+    829: (0.000001647100, 0.000000667480, 0.000000000000),
     830: (0.000001553140, 0.000000629700, 0.000000000000)
 }
diff --git a/coloraide/temperature/ohno_2013.py b/coloraide/temperature/ohno_2013.py
index 7d4182b2c..7bfbe200c 100644
--- a/coloraide/temperature/ohno_2013.py
+++ b/coloraide/temperature/ohno_2013.py
@@ -17,8 +17,6 @@
 if TYPE_CHECKING:  # pragma: no cover
     from ..color import Color
 
-DEFAULT_WHITE = tuple(util.xy_to_xyz(cat.WHITES['2deg']['D65']))
-
 
 class BlackBodyCurve:
     """
@@ -34,7 +32,7 @@ class BlackBodyCurve:
     def __init__(
         self,
         cmfs: dict[int, tuple[float, float, float]] = cmfs.cie_1931_2deg,
-        white: VectorLike = DEFAULT_WHITE,
+        white: VectorLike = cat.WHITES['2deg']['D65'],
         planck_step: int = 5
     ) -> None:
         """Initialize."""
@@ -43,7 +41,7 @@ def __init__(
         self.cmfs_start = min(keys)
         self.cmfs_end = max(keys)
         self.cmfs = cmfs
-        self.white = white
+        self.white = util.xy_to_xyz(white)
         self.planck_step = planck_step
 
         # Low temperature range
@@ -61,7 +59,7 @@ def __init__(
             )
             self.domain.append(k)
             points.append([u, v])
-        self.spline = alg.interpolate(points, method='monotone')
+        self.spline = alg.interpolate(points, method='catrom')
 
         # High temperature range
         start = end
@@ -78,7 +76,7 @@ def __init__(
             )
             self.domain2.append(k)
             points.append([u, v])
-        self.spline2 = alg.interpolate(points, method='monotone')
+        self.spline2 = alg.interpolate(points, method='catrom')
 
     def scale(self, point: float, domain: list[float]) -> float:
         """Scale the temperature point to match the range 0 - 1."""
@@ -143,7 +141,7 @@ class Ohno2013(CCT):
     def __init__(
         self,
         cmfs: dict[int, tuple[float, float, float]] = cmfs.cie_1931_2deg,
-        white: VectorLike = DEFAULT_WHITE,
+        white: VectorLike = cat.WHITES['2deg']['D65'],
         planck_step: int = 5
     ):
         """Initialize."""
diff --git a/coloraide/temperature/planck.py b/coloraide/temperature/planck.py
index c35631c78..929eb3712 100644
--- a/coloraide/temperature/planck.py
+++ b/coloraide/temperature/planck.py
@@ -40,9 +40,10 @@ def temp_to_uv_planckian_locus(
     x = y = z = 0.0
 
     for wavelength in range(start, end + 1, step):
-        m = c1 * (wavelength ** -5) * (math.exp((c2 * 1e9) / (wavelength * temp)) - 1.0) ** -1
-        x += m * cmfs[wavelength][0]
-        y += m * cmfs[wavelength][1]
-        z += m * cmfs[wavelength][2]
+        m = c1 * (wavelength ** -5) * math.expm1((c2 * 1e9) / (wavelength * temp)) ** -1
+        cmf = cmfs[wavelength]
+        x += m * cmf[0]
+        y += m * cmf[1]
+        z += m * cmf[2]
 
     return util.xy_to_uv_1960(util.xyz_to_xyY([x, y, z], white)[:2])
diff --git a/coloraide/temperature/robertson_1968.py b/coloraide/temperature/robertson_1968.py
index 35eb234c3..052bbb163 100644
--- a/coloraide/temperature/robertson_1968.py
+++ b/coloraide/temperature/robertson_1968.py
@@ -8,50 +8,22 @@
 """
 from __future__ import annotations
 import math
+from . import planck
 from .. import algebra as alg
 from .. import util
+from .. import cat
+from .. import cmfs
 from ..temperature import CCT
 from ..types import Vector, VectorLike
-from typing import TYPE_CHECKING, Any, Sequence
+from typing import TYPE_CHECKING, Any
 
 if TYPE_CHECKING:  # pragma: no cover
     from ..color import Color
 
-# Table for Robertson 1968 method
-# Data: reciprocal temperature, u, v, slope
-RUVT = [
-    (0.0, 0.18006, 0.26352, -0.24341),
-    (10.0, 0.18066, 0.26589, -0.25479),
-    (20.0, 0.18133, 0.26846, -0.26876),
-    (30.0, 0.18208, 0.27119, -0.28539),
-    (40.0, 0.18293, 0.27407, -0.30470),
-    (50.0, 0.18388, 0.27709, -0.32675),
-    (60.0, 0.18494, 0.28021, -0.35156),
-    (70.0, 0.18611, 0.28342, -0.37915),
-    (80.0, 0.18740, 0.28668, -0.40955),
-    (90.0, 0.18880, 0.28997, -0.44278),
-    (100.0, 0.19032, 0.29326, -0.47888),
-    (125.0, 0.19462, 0.30141, -0.58204),
-    (150.0, 0.19962, 0.30921, -0.70471),
-    (175.0, 0.20525, 0.31647, -0.84901),
-    (200.0, 0.21142, 0.32312, -1.0182),
-    (225.0, 0.21807, 0.32909, -1.2168),
-    (250.0, 0.22511, 0.33439, -1.4512),
-    (275.0, 0.23247, 0.33904, -1.7298),
-    (300.0, 0.24010, 0.34308, -2.0637),
-    (325.0, 0.24792, 0.34655, -2.4681),  # Note: 0.24792 is a corrected value for the error found in W&S as 0.24702
-    (350.0, 0.25591, 0.34951, -2.9641),
-    (375.0, 0.26400, 0.35200, -3.5814),
-    (400.0, 0.27218, 0.35407, -4.3633),
-    (425.0, 0.28039, 0.35577, -5.3762),
-    (450.0, 0.28863, 0.35714, -6.7262),
-    (475.0, 0.29685, 0.35823, -8.5955),
-    (500.0, 0.30505, 0.35907, -11.324),
-    (525.0, 0.31320, 0.35968, -15.628),
-    (550.0, 0.32129, 0.36011, -23.325),
-    (575.0, 0.32931, 0.36038, -40.770),
-    (600.0, 0.33724, 0.36051, -116.45)
-]
+# Original 31 mired points 0 - 600
+MIRED_ORIGINAL = tuple(range(0, 100, 10)) + tuple(range(100, 601, 25))
+# Extended 16 mired points 625 - 1000
+MIRED_EXTENDED = MIRED_ORIGINAL + tuple(range(625, 1001, 25))
 
 
 class Robertson1968(CCT):
@@ -59,10 +31,71 @@ class Robertson1968(CCT):
 
     NAME = 'robertson-1968'
 
-    def __init__(self, table: Sequence[VectorLike] = RUVT):
+    def __init__(
+        self,
+        cmfs: dict[int, tuple[float, float, float]] = cmfs.cie_1931_2deg,
+        white: VectorLike = cat.WHITES['2deg']['D65'],
+        mired: VectorLike = MIRED_EXTENDED,
+        sigfig: int = 5,
+        planck_step: int = 1,
+    ) -> None:
         """Initialize."""
 
-        self.table = table
+        self.table = self.generate_table(cmfs, white, mired, sigfig, planck_step)
+
+    def generate_table(
+        self,
+        cmfs: dict[int, tuple[float, float, float]],
+        white: VectorLike,
+        mired: VectorLike,
+        sigfig: int,
+        planck_step: int,
+    ) -> list[tuple[float, float, float, float]]:
+        """
+        Generate the necessary table for the Robertson1968 method.
+
+        The below algorithm, coupled with the 1nm CMFs for the 1931 2 degree table, allows us to replicate the
+        documented 31 points exactly.
+
+        For each mired value we calculate two additional points, one on each side at a distance of 0.1.
+        We use a very small distance so that we can approximate the slope. We calculate the distance between
+        the targeted value and the two neighbors and then calculate the slope of the two small lines. Then we
+        can calculate an interpolation factor and interpolate the slope for our target.
+
+        We are able to calculate the uv pair for each mired point directly except for 0. 0 requires us to
+        interpolate the values as it will cause a divide by zero in the Planckian locus. In this case, we
+        assume a perfect 0.5 (middle) for our interpolation.
+        """
+
+        xyzw = util.xy_to_xyz(white)
+        table = []  # type: list[tuple[float, float, float, float]]
+        for t in mired:
+            uv1 = planck.temp_to_uv_planckian_locus(1e6 / (t - 0.01), cmfs, xyzw, step=planck_step)
+            uv2 = planck.temp_to_uv_planckian_locus(1e6 / (t + 0.01), cmfs, xyzw, step=planck_step)
+            if t == 0:
+                factor = 0.5
+                uv = [alg.lerp(uv1[0], uv2[0], factor), alg.lerp(uv1[1], uv2[1], factor)]
+            else:
+                uv = planck.temp_to_uv_planckian_locus(1e6 / t, cmfs, xyzw, step=planck_step)
+                d1 = math.sqrt((uv[1] - uv1[1]) ** 2 + (uv[0] - uv1[0]) ** 2)
+                d2 = math.sqrt((uv2[1] - uv[1]) ** 2 + (uv2[0] - uv[0]) ** 2)
+                factor = d1 / (d1 + d2)
+            m1 = -((uv[1] - uv1[1]) / (uv[0] - uv1[0])) ** -1
+            m2 = -((uv2[1] - uv[1]) / (uv2[0] - uv[0])) ** -1
+            m = alg.lerp(m1, m2, factor)
+            if sigfig:
+                template = '{{:.{}g}}'.format(sigfig)
+                table.append(
+                    (
+                        float(t),
+                        float(template.format(uv[0])),
+                        float(template.format(uv[1])),
+                        float(template.format(m))
+                    )
+                )
+            else:
+                table.append((t, uv[0], uv[1], m))
+        return table
 
     def to_cct(self, color: Color, **kwargs: Any) -> Vector:
         """Calculate a color's CCT."""
diff --git a/docs/src/markdown/temperature.md b/docs/src/markdown/temperature.md
index aa64a9be3..013d2db0e 100644
--- a/docs/src/markdown/temperature.md
+++ b/docs/src/markdown/temperature.md
@@ -1,16 +1,9 @@
 # Correlated Color Temperature
 
-When anything gets warm enough it will start to give off light, and the hotter it gets, the more energetic the light
-is. As an object increases in temperature, it will shift from the red end of the spectrum to the blue end.
-
-```py play
-Steps([Color.blackbody(t, out_space='srgb') for t in range(1000, 15000, 50)])
-```
-
 Correlated color temperature (CCT) is a measurement of the average hue of light as it appears to the eye. It is
 expressed as the temperature (in Kelvins) something would need to be heated to glow at approximately the same color.
 
-This response can be modeled with a Planckian or black body locus/curve.
+This response can be modeled with a Planckian or black body locus/curve and is often shown in chromaticity diagrams.
 
 //// html | figure
 ![Black body curve](images/blackbody.png)
@@ -20,6 +13,18 @@ This response can be modeled with a Planckian or black body locus/curve.
 /////
 ////
 
+## CCT
+
+When anything gets warm enough it will start to give off light, and the hotter it gets, the more energetic the light
+is. As an object increases in temperature, it will shift from the red end of the spectrum to the blue end.
+
+ColorAide provides the `blackbody()` method to generate colors along the black body curve. Simply pass in a temperature
+in Kelvin and ColorAide will return an approximate color along the black body locus.
+
+```py play
+Steps([Color.blackbody(t, out_space='srgb') for t in range(1000, 15000, 50)])
+```
+
 ## D~uv~
 
 In addition to CCT, there is also the concept of D~uv~ or ∆~uv~. In the following image, we've now drawn perpendicular
@@ -49,16 +54,16 @@ Color.blackbody(*Color('yellow').cct())
 
 ## Limitations
 
-All algorithms to calculate to and from CCT have some limitations and are approximations, some being more accurate than
-others. Many algorithms are only accurate up to a certain temperature range. Additionally, it is recommend that colors
-that exhibit a ∆~uv~ larger than |5e-2| should be considered inaccurate, and some algorithm's may not do as well out to
-even this limit.
+All algorithms to calculate to and from CCT have some limitations and are only approximations, some being more accurate
+than others. Many algorithms are only accurate up to a certain temperature range. Additionally, it is recommend that
+colors that exhibit a ∆~uv~ larger than |5e-2| should be considered inaccurate, and some algorithm's may not do as well
+out to even this limit.
 
 ## Out of Gamut Temperatures
 
 It should be noted that `blackbody()` normalizes the returned colors by default as the colors are often much too bright
 initially, all having a max luminance. This normalization is usually done under a linear RGB color space, (linear sRGB
-being the default). Sometimes, depending on the range of temperature, the color can also fall outside the gamut under
+being the default). Sometimes, depending on the range of temperature, the color can fall outside the gamut under
 evaluation.
 
 //// html | figure
@@ -69,8 +74,8 @@ CCT of 1200K in relation to the sRGB gamut.
 /////
 ////
 
-Colors that are outside the gamut will only be approximations under the specified gamut and may not convert back to
-exactly the same temperature.
+Colors that are outside the gamut will only be normalized to be inside the gamut and may not convert back to exactly the
+same temperature.
 
 ```py play
 c = Color.blackbody(1200)
@@ -91,14 +96,20 @@ c2
 c2.cct()
 ```
 
+/// note | Output Space
+`out_space` does not affect normalization, it simply converts the returned color to the color space specified by the
+user.
+///
+
 ## Algorithms
 
 There are quite a few approaches to calculating to and from CCT, each with their strengths and weaknesses. ColorAide
-currently only supports a few approaches which are implemented as plugins.
+currently only supports a few approaches, specifically those that support the concept of CCT and ∆~uv~. Each approach
+is implemented as a CCT plugin.
 
 Algorithm       | Key              | Description
 --------------- | ---------------- | -----------
-Robertson\ 1968 | `robertson-1968` | Uses the CIE 2˚ Standard Observer and can handle a range of 1667K - ∞.
+Robertson\ 1968 | `robertson-1968` | Uses the CIE 2˚ Standard Observer and can handle a range of 1000K - ∞.
 Ohno\ 2013      | `ohno-2013`      | Utilizes a combined approach of a triangular and parabolic solver. Current implementation allows for a range of 1000K - 100000K.
 
 ### Robertson 1968
@@ -106,15 +117,59 @@ Ohno\ 2013      | `ohno-2013`      | Utilizes a combined approach of a triangula
 /// success | The Robertson 1968 CCT algorithm is registered in `Color` by default
 ///
 
-An approach created by A. R. Robertson and is based on the CIE 2˚ Standard Observer with a range of 1667K - ∞. This
-approach uses a look up table containing some precalculated points and approximates the points along the black body
-curve.
+The "Robertson 1968" approach was created by A. R. Robertson and is based on the CIE 2˚ Standard Observer with a range
+of 1667K - ∞. This approach uses a look up table containing 31 precalculated points along the black body curve and is
+used to approximate temperatures in between.
+
+Robertson's approach is a reasonably fast approximation, but can exhibit moderate errors at times. The margin of error
+gets increasingly larger at very high temperatures approaching infinity.
+
+ColorAide implements the Robertson 1968 approach by faithfully calculating the original 31 points (with later
+corrections), but it also uses the same approach to extend the lower range from 1667K to 1000K by calculating 16
+additional points.  There is no change in behavior from 1667K to ∞, but it will now properly resolve values as
+low as 1000K as well.
+
+/// tip | Practical Range
+While Robertson's technically supports a range out to infinity, it becomes increasingly less practical after 100000K due
+to increasingly less accurate results. Even some results below 100000K may already have fairly sizeable errors.
+///
+
+```py play
+color = Color.blackbody(5000, duv=0.02, method='robertson-1968')
+color
+color.cct(method='robertson-1968')
+```
+
+Because the calculation logic is built into the plugin, you can actually use the plugin to generate a higher resolution
+table or even generate one using a different set of CMFs. When registering the plugin, you can configure the CMFs and a
+few other options to customize the look up table.
+
+Parameters        | Description
+----------------- | ------------
+`cmfs`            | Valid CMFs at a resolution greater than or equal to 1nm.
+`white`           | A white point as xy chromaticity coordinates.
+`mired`           | The mired value points to generate in the table (1e6 / T~kelvin~ = mired). Values should not be at a resolution lower than 1 mired as it can give the algorithm issues. 0 is acceptable though.
+`sigfig`          | Significant figures to round to. This is required to faithfully generate the values as documented in the papers and is set to `#!py 5` by default. If set to `#!py 0`, no rounding will be done.
+`planck_step`     | This controls the resolution at which the wavelengths in the CMFs are used to calculate the points along the Planckian locus. The original values are calculated with a 1nm resolution, so the default is set to `#!py 1`. If a given table has a lower resolution, such as 5nm, this value can be adjusted to properly work with that table.
 
-The approach is reasonably fast and a decent approximation, but while the algorithm does technically allow conversion up
-to infinity, the margin of error gets increasingly larger at very high temperatures.
+To use a different set of CMFS, such as the CIE 1964 10˚ Standard Observer, we could override the default plugin.
 
 ```py play
-Color.blackbody(5000, duv=0.02, method='robertson-1968').cct(method='robertson-1968')
+from coloraide.temperature import robertson_1968
+from coloraide import cmfs
+from coloraide import cat
+
+mired_points = tuple(range(0, 100, 10)) + tuple(range(100, 601, 25)) + tuple(range(625, 1001, 25))
+
+class Custom(Color):
+    ...
+
+Custom.register(
+    robertson_1968.Robertson1968(cmfs.cie_1964_10deg, cat.WHITES['10deg']['D65'], mired_points, 0),
+    overwrite=True
+)
+
+Steps([Color.blackbody(t, out_space='srgb', method='robertson-1968') for t in range(1000, 15000, 50)])
 ```
 
 ### Ohno 2013
@@ -131,31 +186,62 @@ smaller intervals based on the first solution. This can allow for a high accurac
 in memory.
 
 For good accuracy throughout the range of 1000K - 100000K, as ColorAide supports, a very large table would be needed. If
-the "automatic expansion" technique was used, without caching the data which would cause the table to balloon in memory,
-the process is much slower.
+the "automatic expansion" technique was used, without caching the data which would cause the table to balloon in
+memory, the process is much slower.
 
 To mitigate the downside of storing a massive table in memory and to reduce the performance issues when using "automatic
 expansion", ColorAide uses a moderately sized table and creates a spline to interpolate points in between. The expansion
-technique is used to get close to the target using the spline as the data table, and then more accurate values are
-calculated for use in the triangular and parabolic solver. This allows us to use a smaller table while mitigating the
-performance issues associated with the expansion technique, all while maintaining good accuracy. The technique is still
-slower than the [Roberson](#robertson-1968) approach, but it is more accurate approach.
+technique is then used to get close to the target using the spline as the data table. Once points sufficiently close
+are found via the automatic expansion, more accurate values are calculated at those locations and are used in the
+triangular and parabolic solver. This allows us to use a smaller table while mitigating the performance issues
+associated with the expansion technique, all while maintaining good accuracy. The technique is still slower than the
+[Roberson](#robertson-1968) approach, but it is a more accurate approach.
 
 ```py play
-Color.blackbody(5000, duv=0.02).cct()
+color = Color.blackbody(5000, duv=0.02)
+color
+color.cct()
+```
+
+ColorAide exposes some of the knobs to control the automatic expansion.
+
+Parameter    | Description
+------------ | -----------
+`start`      | Used to control the starting range for the search. Default is `#!py 1000`. For accuracy, the start should not be set lower than `#!py 1000`.
+`end`        | Used to control the ending range for the search. Default is `#!py 100000`. For accuracy, the end should not be set higher than `#!py 100000`.
+`samples`    | Number of sample points to use on each iteration of "automatic expansion". The default is `#!py 10`.
+`iterations` | Number of iterations to perform when converging close to the temperature. The default is `#!py 6` as experimentation seemed indicate it yields the best results with a sample size of `#!py 10` and a range of 1000K - 100000K.
+`exact`      | Controls whether the spline approximation is used. When set to `#!py True`, all values are directly calculated, bypassing the spline. Calculations will be slower when enabled. The default is `#!py False` and will utilize the spline providing a performance boost.
+
+By default, the entire range of 1000K to 100000K is explored when resolving CCT, but a smaller range can be used. This
+can be useful if you have an idea of the range, but not the specific value. Using a smaller range may allow for less
+iterations to achieve the same or better accuracy.
+
+```py play
+Color('orange').cct()
+Color('orange').cct(start=2000, end=3000, iterations=3)
 ```
 
 If a more _pure_ approach is desired, `exact` can be used to directly use the "automatic expansion" without using the
-spline. The values for the table will explicitly be calculated on the fly. Performance will be affected.
+spline. The values for the table will be explicitly calculated on the fly. Performance will be affected with minimal
+to no increase in accuracy.
 
 ```py play
+Color.blackbody(5000, duv=0.02).cct()
 Color.blackbody(5000, duv=0.02).cct(exact=True)
 ```
 
-///  tip | Changing Observer
-If desired, the Ohno 2013 approach can use a different standard observer, for instance, the CIE 10˚ Standard Observer.
-ColorAide only provides the CIE 2˚ and 10˚ observer by default. If providing another set of CMFs, they should be at 5nm
-resolution or better as that is the current default step size.
+Lastly, the Ohno 2013 method can be used with other CMFs if desired. To do this, the plugin must be instantiated with
+different CMFs. The plugin supports a few initialization parameters to controls this.
+
+Parameters        | Description
+----------------- | ------------
+`cmfs`            | Valid CMFs at a resolution greater than or equal to 1nm.
+`white`           | A white point as xy chromaticity coordinates.
+`planck_step`     | This controls the resolution at which the wavelengths in the CMFs are used to calculate the points along the Planckian locus. `#!py 5` (5nm) is used as the default as it provides decent performance vs accuracy.
+
+
+To use an different CMFs, such as the CIE 10˚ Standard Observer, we can add the plugin with our desired configuration, overwriting the defaults.
 
 ```py play
 from coloraide import cmfs
@@ -172,7 +258,5 @@ Custom.register(
     overwrite=True
 )
 
-Steps([Color.blackbody(t) for t in range(1000, 15000, 50)])
 Steps([Custom.blackbody(t) for t in range(1000, 15000, 50)])
 ```
-///


Test patch:
diff --git a/tests/test_cct.py b/tests/test_cct.py
index 9474c6696..baa3a370c 100644
--- a/tests/test_cct.py
+++ b/tests/test_cct.py
@@ -21,7 +21,7 @@ def test_cct(self, cct):
 
         for duv in (-0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03):
             cct2, duv2 = Color.blackbody(cct, duv, space=None).cct()
-            assert math.isclose(cct2, cct, rel_tol=(0.00001 if cct < 86000 else 0.0001), abs_tol=0.000001)
+            assert math.isclose(cct2, cct, rel_tol=(0.00001 if cct < 84000 else 0.0001), abs_tol=0.000001)
             assert math.isclose(duv2, duv, rel_tol=0.000001, abs_tol=0.000001)
 
 
@@ -165,34 +165,38 @@ def test_robertson_custom_table(self):
         """Test that we can customize Robertson 1968 table."""
 
         from coloraide.temperature import robertson_1968
+        from coloraide import cmfs
+        from coloraide import cat
 
-        ruvt = robertson_1968.RUVT.copy()
-        # Extend table to approximate down to 1000K
-        ruvt.extend(
-            [(625.0, 0.34508, 0.36053, 189.78),
-             (650.0, 0.35281, 0.36044, 57.748),
-             (675.0, 0.36044, 0.36026, 35.979),
-             (700.0, 0.36795, 0.36002, 27.095),
-             (725.0, 0.37535, 0.35972, 22.303),
-             (750.0, 0.38262, 0.35937, 19.328),
-             (775.0, 0.38976, 0.35897, 17.318),
-             (800.0, 0.39677, 0.35855, 15.879),
-             (825.0, 0.40366, 0.35810, 14.807),
-             (850.0, 0.41040, 0.35763, 13.985),
-             (875.0, 0.41701, 0.35715, 13.339),
-             (900.0, 0.42349, 0.35665, 12.822),
-             (925.0, 0.42983, 0.35615, 12.403),
-             (950.0, 0.43603, 0.35564, 12.059),
-             (975.0, 0.44209, 0.35513, 11.773),
-             (1000.0, 0.44801, 0.35462, 11.535)]
+        class Custom(Color):
+            CCT = 'robertson-1968'
+
+        Custom.register(
+            robertson_1968.Robertson1968(cmfs.cie_1964_10deg, cat.WHITES['10deg']['D65']),
+            overwrite=True
         )
 
+        self.assertEqual(Custom.blackbody(1000, space=None).cct(), [1000.0, 0.0])
+
+    def test_robertson_sigfig(self):
+        """Test that significant figure option."""
+
+        from coloraide.temperature import robertson_1968
+        from coloraide import cmfs
+        from coloraide import cat
+
         class Custom(Color):
             CCT = 'robertson-1968'
 
+        # Don't use significant figure rounding
         Custom.register(
-            robertson_1968.Robertson1968(ruvt),
+            robertson_1968.Robertson1968(cmfs.cie_1931_2deg, cat.WHITES['2deg']['D65'], sigfig=0),
             overwrite=True
         )
 
-        self.assertEqual(Custom.blackbody(1000, space=None).cct(), [1000.0, 0.0])
+        cct1, duv1 = Color('orange').cct()
+        assert math.isclose(cct1, 2424.1146637385255, rel_tol=1e-11, abs_tol=1e-11)
+        assert math.isclose(duv1, 0.008069417642630583, rel_tol=1e-11, abs_tol=1e-11)
+        cct2, duv2 = Custom('orange').cct()
+        assert math.isclose(cct2, 2423.930481644873, rel_tol=1e-11, abs_tol=1e-11)
+        assert math.isclose(duv2, 0.008112876273860207, rel_tol=1e-11, abs_tol=1e-11)