Skip to content

Commit 161f684

Browse files
authored
Compilation of binary operators is improved. (#58)
1 parent d111bbf commit 161f684

14 files changed

+295
-231
lines changed

BenchmarkDotNet.Artifacts/results/CompilationBenchmarks-report-github.md

+24-24
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,27 @@ BenchmarkDotNet v0.13.12, Windows 11 (10.0.22631.4112/23H2/2023Update/SunValley3
1111
```
1212
| Method | Job | Runtime | Mean | Error | StdDev | Gen0 | Gen1 | Allocated |
1313
|----------------------------------------------------------------------------- |--------- |--------- |---------------:|--------------:|--------------:|-------:|-------:|----------:|
14-
| 'MathEvaluator: "22888.32 * 30 / 323.34 / .5 - -1 / (2 + 22888.32) * 4 - 6"' | .NET 6.0 | .NET 6.0 | 20,045.559 ns | 83.4166 ns | 69.6567 ns | 0.4578 | 0.2136 | 5911 B |
15-
| 'NCalc: "22888.32 * 30 / 323.34 / .5 - -1 / (2 + 22888.32) * 4 - 6"' | .NET 6.0 | .NET 6.0 | 36,109.509 ns | 378.7183 ns | 354.2534 ns | 0.6714 | 0.3052 | 8919 B |
16-
| 'MathEvaluator: "true or not false and (true or false)"' | .NET 6.0 | .NET 6.0 | 121,660.892 ns | 699.7564 ns | 584.3283 ns | 0.4883 | 0.2441 | 6176 B |
17-
| 'NCalc: "true or not false and (true or false)"' | .NET 6.0 | .NET 6.0 | 26,124.546 ns | 228.4593 ns | 202.5232 ns | 0.3967 | 0.1831 | 5215 B |
18-
| 'MathEvaluator: "A or not B and (C or B)"' | .NET 6.0 | .NET 6.0 | 154,224.866 ns | 607.3746 ns | 538.4217 ns | 0.4883 | 0.2441 | 8583 B |
19-
| 'NCalc: "A or not B and (C or B)"' | .NET 6.0 | .NET 6.0 | 83,855.837 ns | 1,110.4163 ns | 1,038.6841 ns | 0.4883 | 0.2441 | 6662 B |
20-
| 'MathEvaluator: fn(new BooleanVariables { A = a, B = b, C = c })' | .NET 6.0 | .NET 6.0 | 17.224 ns | 0.3424 ns | 0.3203 ns | 0.0019 | - | 24 B |
21-
| 'NCalc: fn(new BooleanVariables { A = a, B = b, C = c })' | .NET 6.0 | .NET 6.0 | 3.855 ns | 0.0984 ns | 0.1473 ns | 0.0019 | - | 24 B |
22-
| 'MathEvaluator: "Sin(pi/6) + Cos(pi/3)"' | .NET 6.0 | .NET 6.0 | 77,819.558 ns | 1,382.7024 ns | 1,293.3807 ns | 0.3662 | 0.1221 | 5707 B |
23-
| 'NCalc: "Sin(pi/6) + Cos(pi/3)"' | .NET 6.0 | .NET 6.0 | 40,158.290 ns | 799.1172 ns | 855.0464 ns | 0.6104 | 0.3052 | 8063 B |
24-
| 'MathEvaluator: "Sin(a) + Cos(b)"' | .NET 6.0 | .NET 6.0 | 96,667.625 ns | 1,064.7625 ns | 995.9795 ns | 0.4883 | 0.2441 | 6901 B |
25-
| 'NCalc: "Sin(a) + Cos(b)"' | .NET 6.0 | .NET 6.0 | 70,651.252 ns | 1,341.7527 ns | 1,317.7806 ns | 0.6104 | 0.2441 | 8510 B |
26-
| 'MathEvaluator: "22888.32 * 30 / 323.34 / .5 - -1 / (2 + 22888.32) * 4 - 6"' | .NET 8.0 | .NET 8.0 | 17,514.274 ns | 340.5176 ns | 318.5204 ns | 0.4578 | 0.4272 | 5911 B |
27-
| 'NCalc: "22888.32 * 30 / 323.34 / .5 - -1 / (2 + 22888.32) * 4 - 6"' | .NET 8.0 | .NET 8.0 | 29,618.793 ns | 551.2192 ns | 735.8618 ns | 0.6104 | 0.4883 | 8231 B |
28-
| 'MathEvaluator: "true or not false and (true or false)"' | .NET 8.0 | .NET 8.0 | 177,594.533 ns | 2,621.1028 ns | 2,323.5394 ns | 0.4883 | 0.2441 | 6184 B |
29-
| 'NCalc: "true or not false and (true or false)"' | .NET 8.0 | .NET 8.0 | 21,226.359 ns | 371.6772 ns | 347.6671 ns | 0.3967 | 0.3662 | 5263 B |
30-
| 'MathEvaluator: "A or not B and (C or B)"' | .NET 8.0 | .NET 8.0 | 234,100.078 ns | 3,714.9527 ns | 3,474.9691 ns | 0.4883 | - | 8578 B |
31-
| 'NCalc: "A or not B and (C or B)"' | .NET 8.0 | .NET 8.0 | 78,152.894 ns | 1,513.0687 ns | 1,415.3254 ns | 0.4883 | 0.3662 | 6710 B |
32-
| 'MathEvaluator: fn(new BooleanVariables { A = a, B = b, C = c })' | .NET 8.0 | .NET 8.0 | 13.000 ns | 0.2848 ns | 0.5486 ns | 0.0019 | - | 24 B |
33-
| 'NCalc: fn(new BooleanVariables { A = a, B = b, C = c })' | .NET 8.0 | .NET 8.0 | 3.068 ns | 0.0850 ns | 0.1373 ns | 0.0019 | - | 24 B |
34-
| 'MathEvaluator: "Sin(pi/6) + Cos(pi/3)"' | .NET 8.0 | .NET 8.0 | 97,539.741 ns | 556.4340 ns | 520.4888 ns | 0.3662 | 0.2441 | 5707 B |
35-
| 'NCalc: "Sin(pi/6) + Cos(pi/3)"' | .NET 8.0 | .NET 8.0 | 32,370.602 ns | 632.3281 ns | 844.1398 ns | 0.6104 | 0.4883 | 7967 B |
36-
| 'MathEvaluator: "Sin(a) + Cos(b)"' | .NET 8.0 | .NET 8.0 | 115,224.492 ns | 2,244.8324 ns | 2,204.7255 ns | 0.4883 | 0.2441 | 6902 B |
37-
| 'NCalc: "Sin(a) + Cos(b)"' | .NET 8.0 | .NET 8.0 | 59,387.714 ns | 1,038.1200 ns | 971.0581 ns | 0.6104 | 0.4883 | 8510 B |
14+
| 'MathEvaluator: "22888.32 * 30 / 323.34 / .5 - -1 / (2 + 22888.32) * 4 - 6"' | .NET 6.0 | .NET 6.0 | 19,668.553 ns | 204.5820 ns | 191.3662 ns | 0.4578 | 0.2136 | 5911 B |
15+
| 'NCalc: "22888.32 * 30 / 323.34 / .5 - -1 / (2 + 22888.32) * 4 - 6"' | .NET 6.0 | .NET 6.0 | 37,953.247 ns | 719.2059 ns | 799.3955 ns | 0.6714 | 0.3052 | 8919 B |
16+
| 'MathEvaluator: "true or not false and (true or false)"' | .NET 6.0 | .NET 6.0 | 25,445.280 ns | 499.2615 ns | 747.2711 ns | 0.5188 | 0.2441 | 6616 B |
17+
| 'NCalc: "true or not false and (true or false)"' | .NET 6.0 | .NET 6.0 | 26,285.186 ns | 458.1359 ns | 428.5406 ns | 0.3967 | 0.1831 | 5215 B |
18+
| 'MathEvaluator: "A or not B and (C or B)"' | .NET 6.0 | .NET 6.0 | 101,364.960 ns | 1,289.0462 ns | 1,205.7747 ns | 0.6104 | 0.2441 | 8829 B |
19+
| 'NCalc: "A or not B and (C or B)"' | .NET 6.0 | .NET 6.0 | 86,156.691 ns | 1,696.4321 ns | 2,590.6310 ns | 0.4883 | 0.2441 | 6662 B |
20+
| 'MathEvaluator: fn(new BooleanVariables { A = a, B = b, C = c })' | .NET 6.0 | .NET 6.0 | 4.439 ns | 0.1074 ns | 0.1149 ns | 0.0019 | - | 24 B |
21+
| 'NCalc: fn(new BooleanVariables { A = a, B = b, C = c })' | .NET 6.0 | .NET 6.0 | 3.948 ns | 0.0853 ns | 0.0797 ns | 0.0019 | - | 24 B |
22+
| 'MathEvaluator: "Sin(pi/6) + Cos(pi/3)"' | .NET 6.0 | .NET 6.0 | 78,774.799 ns | 1,570.0480 ns | 1,928.1599 ns | 0.3662 | 0.1221 | 5707 B |
23+
| 'NCalc: "Sin(pi/6) + Cos(pi/3)"' | .NET 6.0 | .NET 6.0 | 38,431.629 ns | 713.3424 ns | 667.2609 ns | 0.6104 | 0.3052 | 8063 B |
24+
| 'MathEvaluator: "Sin(a) + Cos(b)"' | .NET 6.0 | .NET 6.0 | 94,092.406 ns | 1,747.6752 ns | 1,549.2685 ns | 0.4883 | 0.2441 | 6901 B |
25+
| 'NCalc: "Sin(a) + Cos(b)"' | .NET 6.0 | .NET 6.0 | 66,611.758 ns | 658.3745 ns | 549.7725 ns | 0.6104 | 0.2441 | 8510 B |
26+
| 'MathEvaluator: "22888.32 * 30 / 323.34 / .5 - -1 / (2 + 22888.32) * 4 - 6"' | .NET 8.0 | .NET 8.0 | 17,026.691 ns | 123.5845 ns | 103.1987 ns | 0.4578 | 0.4272 | 5911 B |
27+
| 'NCalc: "22888.32 * 30 / 323.34 / .5 - -1 / (2 + 22888.32) * 4 - 6"' | .NET 8.0 | .NET 8.0 | 28,883.652 ns | 227.8088 ns | 213.0925 ns | 0.6104 | 0.4883 | 8231 B |
28+
| 'MathEvaluator: "true or not false and (true or false)"' | .NET 8.0 | .NET 8.0 | 20,015.723 ns | 213.0026 ns | 199.2428 ns | 0.4883 | 0.4272 | 6662 B |
29+
| 'NCalc: "true or not false and (true or false)"' | .NET 8.0 | .NET 8.0 | 21,397.180 ns | 395.6863 ns | 370.1252 ns | 0.3967 | 0.3662 | 5263 B |
30+
| 'MathEvaluator: "A or not B and (C or B)"' | .NET 8.0 | .NET 8.0 | 89,618.867 ns | 772.9309 ns | 723.0001 ns | 0.4883 | 0.2441 | 8873 B |
31+
| 'NCalc: "A or not B and (C or B)"' | .NET 8.0 | .NET 8.0 | 73,845.091 ns | 631.9701 ns | 591.1452 ns | 0.4883 | 0.3662 | 6790 B |
32+
| 'MathEvaluator: fn(new BooleanVariables { A = a, B = b, C = c })' | .NET 8.0 | .NET 8.0 | 3.200 ns | 0.0274 ns | 0.0243 ns | 0.0019 | - | 24 B |
33+
| 'NCalc: fn(new BooleanVariables { A = a, B = b, C = c })' | .NET 8.0 | .NET 8.0 | 3.387 ns | 0.0715 ns | 0.0634 ns | 0.0019 | - | 24 B |
34+
| 'MathEvaluator: "Sin(pi/6) + Cos(pi/3)"' | .NET 8.0 | .NET 8.0 | 97,413.757 ns | 425.0299 ns | 397.5732 ns | 0.3662 | 0.2441 | 5707 B |
35+
| 'NCalc: "Sin(pi/6) + Cos(pi/3)"' | .NET 8.0 | .NET 8.0 | 31,470.244 ns | 311.8249 ns | 276.4246 ns | 0.6104 | 0.4883 | 7967 B |
36+
| 'MathEvaluator: "Sin(a) + Cos(b)"' | .NET 8.0 | .NET 8.0 | 111,472.478 ns | 567.4603 ns | 503.0388 ns | 0.4883 | 0.2441 | 6902 B |
37+
| 'NCalc: "Sin(a) + Cos(b)"' | .NET 8.0 | .NET 8.0 | 57,966.899 ns | 376.2988 ns | 314.2265 ns | 0.6104 | 0.4883 | 8510 B |

0 commit comments

Comments
 (0)