Fixed those tests (had one sign wrong), looks more plausible now, and added a few more bells and whistles.
Which one is the best function depends greatly on what you need.
In summary, Spiro's original (C15) version is vastly more accurate than Garrett's C11 looking at maximal error. His C11 version is competitive in double mode, but not so in single mode. Spiro's C15 beats Garrett's C11 on average error, but his C11 loses out. Looking at RMSE, Spiro's C11 version is inferior (the C15 version is still better than Garrett's C11, but that is unsurprising).
Garrett's C11 function is undisputedly the fastest of all competitors. It does however have an issue about which I'm not quite how severe it is (read on!).
All competitors, no exceptions, failed (or at least came close to failing) one or the other sanity test. The C standard library does not report sin(0) as exactly 0.0 (although it is close to one digit, but really... a standard library function should be 100% exact on the few "well known" locations). All of the other implementations are somewhat worse, but still within at least 6-7 decimals, so I guess that's OK. We're talking about reasonably good fast approximations, not exact science, after all!
Spiro's C15 and Adam_42's reordered version both have intervals where f(x) > +/-1. This may be an annoying property, but I think it's not too bad.
However, the thing that makes me worry the most is that Garrett's version seems to be not monotonically rising/falling when it should. The code tests random positions within given intervals and compares e.g. f(t) < f(t+x) where x is a small constant. It happens that the comparison isn't always true. In other words, the curve must be somewhat "wiggly". Now, I am not sure if this couldn't cause problems if one relies on monotony. But maybe that's a complete non-issue... not sure. It could for example matter if you did many small incremental rotations. But nobody is doing that for obvious reasons... so... not sure?
I've uploaded the test program to godbolt.org for whoever might want to play further with it (but note you can't run it there, it takes about 4 mins per run).
Complete output from one test run on my desktop:
QPC resolution = 3,328,212 ticks/sec
Iterations per test = 500,000,000
timings
sin : 60,082,423 [0,036105 us per iteration] --> 1,0 : 1
sin_garrett_c11 : 2,856,948 [0,001717 us per iteration] --> 21,0 : 1
sin_garrett_c11_s : 4,166,675 [0,002504 us per iteration] --> 14,4 : 1
sin_spiro_s : 7,969,460 [0,004789 us per iteration] --> 7,5 : 1
sin_spiro : 4,588,002 [0,002757 us per iteration] --> 13,1 : 1
sin_adam42_s : 12,541,737 [0,007537 us per iteration] --> 4,8 : 1
sin_adam42 : 7,973,903 [0,004792 us per iteration] --> 7,5 : 1
sin_spiro_c11_s : 4,988,171 [0,002998 us per iteration] --> 12,0 : 1
sin_spiro_c11 : 3,852,504 [0,002315 us per iteration] --> 15,6 : 1
error metrics
sin : emax=0,000000000000000 eavg=0,000000000000000 sse=0,000000000000000 rmse=0,000000000000000 0 values > 1.0
sin_garrett_c11 : emax=0,000000291691941 eavg=0,000000051244667 sse=0,000001752641653 rmse=0,000000059205433 0 values > 1.0
sin_garrett_c11_s : emax=0,000000485314278 eavg=0,000000058533900 sse=0,000002706517939 rmse=0,000000073573337 0 values > 1.0
sin_spiro_s : emax=0,000000395600644 eavg=0,000000040108091 sse=0,000001704967828 rmse=0,000000058394654 380 values > 1.0
bracket around -3/2 pi where f(x) > 1 : [-4,712413394447189 ; -4,712291324134689] interval = 0,000122070312500
bracket around -pi/2 where f(x) < -1 : [-1,570820740857397 ; -1,570601014294897] interval = 0,000219726562500
bracket around pi/2 where f(x) > 1 : [+1,570601014294897 ; +1,570820740857397] interval = 0,000219726562500
bracket around 3/2 pi where f(x) < -1 : [+4,712291324134689 ; +4,712413394447189] interval = 0,000122070312500
sin_spiro : emax=0,000000019798559 eavg=0,000000008708419 sse=0,000000063015472 rmse=0,000000011226350 0 values > 1.0
sin_adam42_s : emax=0,000000626152196 eavg=0,000000044799408 sse=0,000002159329615 rmse=0,000000065716507 2033 values > 1.0
bracket around -3/2 pi where f(x) > 1 : [-4,712584292884689 ; -4,712340152259689] interval = 0,000244140625000
bracket around -pi/2 where f(x) < -1 : [-1,570845154919897 ; -1,570601014294897] interval = 0,000244140625000
bracket around pi/2 where f(x) > 1 : [+1,570601014294897 ; +1,570845154919897] interval = 0,000244140625000
bracket around 3/2 pi where f(x) < -1 : [+4,712340152259689 ; +4,712584292884689] interval = 0,000244140625000
sin_adam42 : emax=0,000000019798559 eavg=0,000000008708419 sse=0,000000063015472 rmse=0,000000011226350 0 values > 1.0
sin_spiro_c11_s : emax=0,000000540252794 eavg=0,000000072925062 sse=0,000004476188423 rmse=0,000000094617001 0 values > 1.0
sin_spiro_c11 : emax=0,000000167929271 eavg=0,000000061079306 sse=0,000002831597331 rmse=0,000000075254200 0 values > 1.0
sanity tests
sin technically failed the 'sin(-pi) == 0' test (but has more than 10 good digits)
expect : +0,0000000000000000
value : -0,0000000000000001
diff : +0,0000000000000001
sin technically failed the 'sin(pi) == 0' test (but has more than 10 good digits)
expect : +0,0000000000000000
value : +0,0000000000000001
diff : +0,0000000000000001
sin_garrett_c11 failed the 'sin(-pi) == 0' test
expect : +0,0000000000000000
value : +0,0000003055730728
diff : +0,0000003055730728
sin_garrett_c11 failed the 'sin(-pi/2) == -1' test
expect : -1,0000000000000000
value : -0,9999999478418549
diff : +0,0000000521581451
sin_garrett_c11 failed the 'sin(pi/2) == 1' test
expect : +1,0000000000000000
value : +0,9999999478418549
diff : +0,0000000521581451
sin_garrett_c11 failed the 'sin(pi) == 0' test
expect : +0,0000000000000000
value : -0,0000003055730728
diff : +0,0000003055730728
sin_garrett_c11 failed the 'monotonically rising in [-2 pi, -3/2 pi]' test
at t = -5,8006437385161131
f(t) = 0,8191135033185917
f(t+eps) = 0,8190794596769879
sin_garrett_c11 failed the 'monotonically rising in [-2 pi, -3/2 pi]' test
at t = -5,8201378991877419
f(t) = 0,8201224516653609
f(t+eps) = 0,8200543801193481
sin_garrett_c11 failed the 'monotonically rising in [-2 pi, -3/2 pi]' test
at t = -6,0921383176898001
f(t) = 0,9266029064291225
f(t+eps) = 0,9258043767902340
---> 1,780,385 incidents total (5,000,000 samples)
sin_garrett_c11 failed the 'monotonically rising in [3/2 pi, 2 pi]' test
at t = 5,9531260762097542
f(t) = -0,8475519144872790
f(t+eps) = -0,8479151826540420
sin_garrett_c11 failed the 'monotonically rising in [3/2 pi, 2 pi]' test
at t = 6,1518134216550120
f(t) = -0,9812926066411358
f(t+eps) = -0,9823326492861200
sin_garrett_c11 failed the 'monotonically rising in [3/2 pi, 2 pi]' test
at t = 6,2285178390787088
f(t) = -1,0741594961994370
f(t+eps) = -1,0755554115381964
---> 1,781,416 incidents total (5,000,000 samples)
sin_garrett_c11_s failed the 'sin(-pi) == 0' test
expect : +0,0000000000000000
value : +0,0000004111419116
diff : +0,0000004111419116
sin_garrett_c11_s failed the 'sin(-pi/2) == -1' test
expect : -1,0000000000000000
value : -0,9999999403953552
diff : +0,0000000596046448
sin_garrett_c11_s failed the 'sin(pi/2) == 1' test
expect : +1,0000000000000000
value : +0,9999999403953552
diff : +0,0000000596046448
sin_garrett_c11_s failed the 'sin(pi) == 0' test
expect : +0,0000000000000000
value : -0,0000004111419116
diff : +0,0000004111419116
sin_garrett_c11_s failed the 'monotonically rising in [-2 pi, -3/2 pi]' test
at t = -5,8006437385161131
f(t) = 0,8191134929656982
f(t+eps) = 0,8190794587135315
sin_garrett_c11_s failed the 'monotonically rising in [-2 pi, -3/2 pi]' test
at t = -5,8201378991877419
f(t) = 0,8201224803924561
f(t+eps) = 0,8200543522834778
sin_garrett_c11_s failed the 'monotonically rising in [-2 pi, -3/2 pi]' test
at t = -6,0921383176898001
f(t) = 0,9266027808189392
f(t+eps) = 0,9258044362068176
---> 1,780,704 incidents total (5,000,000 samples)
sin_garrett_c11_s failed the 'monotonically rising in [3/2 pi, 2 pi]' test
at t = 5,9531260762097542
f(t) = -0,8475518822669983
f(t+eps) = -0,8479151129722595
sin_garrett_c11_s failed the 'monotonically rising in [3/2 pi, 2 pi]' test
at t = 6,1518134216550120
f(t) = -0,9812927842140198
f(t+eps) = -0,9823326468467712
sin_garrett_c11_s failed the 'monotonically rising in [3/2 pi, 2 pi]' test
at t = 6,2285178390787088
f(t) = -1,0741598606109619
f(t+eps) = -1,0755554437637329
---> 1,781,735 incidents total (5,000,000 samples)
sin_spiro_s failed the 'sin(-pi) == 0' test
expect : +0,0000000000000000
value : +0,0000000874227766
diff : +0,0000000874227766
sin_spiro_s failed the 'sin(pi) == 0' test
expect : +0,0000000000000000
value : -0,0000000874227766
diff : +0,0000000874227766
sin_spiro failed the 'sin(-pi/2) == -1' test
expect : -1,0000000000000000
value : -0,9999999868726539
diff : +0,0000000131273461
sin_spiro failed the 'sin(pi/2) == 1' test
expect : +1,0000000000000000
value : +0,9999999868726539
diff : +0,0000000131273461
sin_adam42_s failed the 'sin(-pi) == 0' test
expect : +0,0000000000000000
value : +0,0000000874227766
diff : +0,0000000874227766
sin_adam42_s failed the 'sin(pi) == 0' test
expect : +0,0000000000000000
value : -0,0000000874227766
diff : +0,0000000874227766
sin_adam42 failed the 'sin(-pi/2) == -1' test
expect : -1,0000000000000000
value : -0,9999999868726537
diff : +0,0000000131273463
sin_adam42 failed the 'sin(pi/2) == 1' test
expect : +1,0000000000000000
value : +0,9999999868726537
diff : +0,0000000131273463
sin_spiro_c11_s failed the 'sin(-pi/2) == -1' test
expect : -1,0000000000000000
value : -0,9999998807907104
diff : +0,0000001192092896
sin_spiro_c11_s failed the 'sin(pi/2) == 1' test
expect : +1,0000000000000000
value : +0,9999998807907104
diff : +0,0000001192092896
sin_spiro_c11 failed the 'sin(-pi) == 0' test
expect : +0,0000000000000000
value : +0,0000001698080958
diff : +0,0000001698080958
sin_spiro_c11 failed the 'sin(-pi/2) == -1' test
expect : -1,0000000000000000
value : -0,9999999175527783
diff : +0,0000000824472217
sin_spiro_c11 failed the 'sin(pi/2) == 1' test
expect : +1,0000000000000000
value : +0,9999999175527783
diff : +0,0000000824472217
sin_spiro_c11 failed the 'sin(pi) == 0' test
expect : +0,0000000000000000
value : -0,0000001698080958
diff : +0,0000001698080958