Initial commit: Pi calculation benchmark with 34 languages

- Added implementations for: bash, brainfuck, c, cpp, crystal, csharp, d, dart, elixir, erlang, fortran, go, haskell, java, javascript, julia, kotlin, objective-c, scala, typescript, lua, nim, odin, perl, php, python, r, ruby, rust, swift, zig, assembly, vimscript, wolfram
- All implementations use Machin's formula: π/4 = 4*arctan(1/5) - arctan(1/239)
- Build system with ./build.sh, test system with ./test.sh
- Performance testing with ./run_all.sh
- Comprehensive README.md explaining performance differences
- Test framework verifies correctness against known π values
This commit is contained in:
Ein Anderssono
2026-04-23 00:26:18 +02:00
commit 54d2fecee0
182 changed files with 17471 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
#!/bin/bash
# Dart Build Script
SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
cd "$SCRIPT_DIR"
echo "=== Dart Build ==="
echo ""
# Check for dart
if ! command -v dart &> /dev/null; then
echo "✗ Dart-kompilator hittades inte!"
echo " Installera Dart: brew install dart"
exit 1
fi
echo "Använder: dart"
# Compile to native executable
if dart compile exe src/print_hej.dart -o bin/print_hej 2>&1; then
echo "✓ Kompilering lyckades!"
echo " Executable: bin/print_hej"
echo ""
echo "För att köra:"
echo " ./bin/print_hej <decimaler>"
else
echo "✗ Kompilering misslyckades!"
exit 1
fi
+71
View File
@@ -0,0 +1,71 @@
import 'dart:io';
// Calculate arctan(1/x) using Taylor series
// arctan(1/x) = 1/x - 1/(3*x^3) + 1/(5*x^5) - ...
BigInt arctan(int x, int decimals) {
BigInt scale = BigInt.from(10).pow(decimals + 10);
BigInt xBig = BigInt.from(x);
BigInt xSquared = xBig * xBig;
BigInt term = scale ~/ xBig;
BigInt result = BigInt.zero;
int n = 0;
while (term != BigInt.zero && n < decimals * 3) {
BigInt divisor = BigInt.from(2 * n + 1);
BigInt contrib = term ~/ divisor;
if (n % 2 == 0) {
result += contrib;
} else {
result -= contrib;
}
term = term ~/ xSquared;
n++;
}
return result;
}
BigInt calculatePi(int decimals) {
BigInt atan1_5 = arctan(5, decimals);
BigInt atan1_239 = arctan(239, decimals);
// pi = 16*arctan(1/5) - 4*arctan(1/239)
return atan1_5 * BigInt.from(16) - atan1_239 * BigInt.from(4);
}
void main(List<String> args) {
int decimals = 100;
if (args.isNotEmpty) {
try {
decimals = int.parse(args[0]);
if (decimals < 1) decimals = 100;
} catch (e) {
decimals = 100;
}
}
BigInt pi = calculatePi(decimals);
String piStr = pi.toString();
// Print with decimal point
stdout.write('3.');
int startIndex = 1;
int endIndex = startIndex + decimals;
if (endIndex > piStr.length) {
endIndex = piStr.length;
}
stdout.write(piStr.substring(startIndex, endIndex));
// Pad with zeros if needed
for (int i = 0; i < decimals - (endIndex - startIndex); i++) {
stdout.write('0');
}
print('');
}