Permalink
Browse files

add (fairly anemic) d implementation

  • Loading branch information...
1 parent 7aecbde commit cdc04835f876d2f45f845f46e8200f5b1362ec3f @ghewgill ghewgill committed Aug 5, 2011
Showing with 340 additions and 0 deletions.
  1. +1 −0 README.md
  2. +1 −0 SConstruct
  3. +2 −0 d/.gitignore
  4. +8 −0 d/SConscript
  5. +11 −0 d/info.html
  6. +269 −0 d/log_factorial.d
  7. +45 −0 d/test.d
  8. +1 −0 gen.py
  9. +1 −0 index.template
  10. +1 −0 test.py
View
1 README.md
@@ -75,6 +75,7 @@ The expected output is:
Checking ada... ok
Checking cpp... ok
Checking csharp... ok
+ Checking d... ok
Checking erlang... ok
Checking go... ok
Checking haskell... ok
View
1 SConstruct
@@ -1,6 +1,7 @@
SConscript("ada/SConscript")
SConscript("cpp/SConscript")
SConscript("csharp/SConscript")
+SConscript("d/SConscript")
SConscript("erlang/SConscript")
SConscript("go/SConscript")
SConscript("java/SConscript")
View
2 d/.gitignore
@@ -0,0 +1,2 @@
+*.o
+test
View
8 d/SConscript
@@ -0,0 +1,8 @@
+# This SConscript file is the basic minimum needed to compile
+# the D 2.0 test program with SCons on Linux.
+
+env = Environment(DFLAGS="-Id")
+env.Program("test", Split("""
+ test.d
+ log_factorial.d
+"""), LIBS=["phobos2", "pthread", "rt", "m"])
View
11 d/info.html
@@ -0,0 +1,11 @@
+<p>
+The D standard <a href="http://www.digitalmars.com/d/2.0/phobos/std_mathspecial.html">"std.mathspecial" module</a> provides implementations of:
+</p>
+
+<ul>
+<li><a href="http://www.digitalmars.com/d/2.0/phobos/std_mathspecial.html#erf">erf</a></li>
+<li><a href="http://www.digitalmars.com/d/2.0/phobos/std_math.html#expm1">expm1</a></li>
+<li><a href="http://www.digitalmars.com/d/2.0/phobos/std_mathspecial.html#normalDistribution">phi</a></li>
+<li><a href="http://www.digitalmars.com/d/2.0/phobos/std_mathspecial.html#normalDistributionInverse">NormalCDFInverse</a></li>
+<li><a href="http://www.digitalmars.com/d/2.0/phobos/std_mathspecial.html#gamma">Gamma</a> and <a href="http://www.digitalmars.com/d/2.0/phobos/std_mathspecial.html#logGamma">Log Gamma</a></li>
+</ul>
View
269 d/log_factorial.d
@@ -0,0 +1,269 @@
+module log_factorial;
+
+import std.math;
+
+real log_factorial(uint n) {
+ if (n > 254) {
+ real x = n + 1;
+ return (x - 0.5)*log(x) - x + 0.5*log(2*PI) + 1.0/(12.0*x);
+ } else {
+ immutable lf = [
+ 0.000000000000000,
+ 0.000000000000000,
+ 0.693147180559945,
+ 1.791759469228055,
+ 3.178053830347946,
+ 4.787491742782046,
+ 6.579251212010101,
+ 8.525161361065415,
+ 10.604602902745251,
+ 12.801827480081469,
+ 15.104412573075516,
+ 17.502307845873887,
+ 19.987214495661885,
+ 22.552163853123421,
+ 25.191221182738683,
+ 27.899271383840894,
+ 30.671860106080675,
+ 33.505073450136891,
+ 36.395445208033053,
+ 39.339884187199495,
+ 42.335616460753485,
+ 45.380138898476908,
+ 48.471181351835227,
+ 51.606675567764377,
+ 54.784729398112319,
+ 58.003605222980518,
+ 61.261701761002001,
+ 64.557538627006323,
+ 67.889743137181526,
+ 71.257038967168000,
+ 74.658236348830158,
+ 78.092223553315307,
+ 81.557959456115029,
+ 85.054467017581516,
+ 88.580827542197682,
+ 92.136175603687079,
+ 95.719694542143202,
+ 99.330612454787428,
+ 102.968198614513810,
+ 106.631760260643450,
+ 110.320639714757390,
+ 114.034211781461690,
+ 117.771881399745060,
+ 121.533081515438640,
+ 125.317271149356880,
+ 129.123933639127240,
+ 132.952575035616290,
+ 136.802722637326350,
+ 140.673923648234250,
+ 144.565743946344900,
+ 148.477766951773020,
+ 152.409592584497350,
+ 156.360836303078800,
+ 160.331128216630930,
+ 164.320112263195170,
+ 168.327445448427650,
+ 172.352797139162820,
+ 176.395848406997370,
+ 180.456291417543780,
+ 184.533828861449510,
+ 188.628173423671600,
+ 192.739047287844900,
+ 196.866181672889980,
+ 201.009316399281570,
+ 205.168199482641200,
+ 209.342586752536820,
+ 213.532241494563270,
+ 217.736934113954250,
+ 221.956441819130360,
+ 226.190548323727570,
+ 230.439043565776930,
+ 234.701723442818260,
+ 238.978389561834350,
+ 243.268849002982730,
+ 247.572914096186910,
+ 251.890402209723190,
+ 256.221135550009480,
+ 260.564940971863220,
+ 264.921649798552780,
+ 269.291097651019810,
+ 273.673124285693690,
+ 278.067573440366120,
+ 282.474292687630400,
+ 286.893133295426990,
+ 291.323950094270290,
+ 295.766601350760600,
+ 300.220948647014100,
+ 304.686856765668720,
+ 309.164193580146900,
+ 313.652829949878990,
+ 318.152639620209300,
+ 322.663499126726210,
+ 327.185287703775200,
+ 331.717887196928470,
+ 336.261181979198450,
+ 340.815058870798960,
+ 345.379407062266860,
+ 349.954118040770250,
+ 354.539085519440790,
+ 359.134205369575340,
+ 363.739375555563470,
+ 368.354496072404690,
+ 372.979468885689020,
+ 377.614197873918670,
+ 382.258588773060010,
+ 386.912549123217560,
+ 391.575988217329610,
+ 396.248817051791490,
+ 400.930948278915760,
+ 405.622296161144900,
+ 410.322776526937280,
+ 415.032306728249580,
+ 419.750805599544780,
+ 424.478193418257090,
+ 429.214391866651570,
+ 433.959323995014870,
+ 438.712914186121170,
+ 443.475088120918940,
+ 448.245772745384610,
+ 453.024896238496130,
+ 457.812387981278110,
+ 462.608178526874890,
+ 467.412199571608080,
+ 472.224383926980520,
+ 477.044665492585580,
+ 481.872979229887900,
+ 486.709261136839360,
+ 491.553448223298010,
+ 496.405478487217580,
+ 501.265290891579240,
+ 506.132825342034830,
+ 511.008022665236070,
+ 515.890824587822520,
+ 520.781173716044240,
+ 525.679013515995050,
+ 530.584288294433580,
+ 535.496943180169520,
+ 540.416924105997740,
+ 545.344177791154950,
+ 550.278651724285620,
+ 555.220294146894960,
+ 560.169054037273100,
+ 565.124881094874350,
+ 570.087725725134190,
+ 575.057539024710200,
+ 580.034272767130800,
+ 585.017879388839220,
+ 590.008311975617860,
+ 595.005524249382010,
+ 600.009470555327430,
+ 605.020105849423770,
+ 610.037385686238740,
+ 615.061266207084940,
+ 620.091704128477430,
+ 625.128656730891070,
+ 630.172081847810200,
+ 635.221937855059760,
+ 640.278183660408100,
+ 645.340778693435030,
+ 650.409682895655240,
+ 655.484856710889060,
+ 660.566261075873510,
+ 665.653857411105950,
+ 670.747607611912710,
+ 675.847474039736880,
+ 680.953419513637530,
+ 686.065407301994010,
+ 691.183401114410800,
+ 696.307365093814040,
+ 701.437263808737160,
+ 706.573062245787470,
+ 711.714725802289990,
+ 716.862220279103440,
+ 722.015511873601330,
+ 727.174567172815840,
+ 732.339353146739310,
+ 737.509837141777440,
+ 742.685986874351220,
+ 747.867770424643370,
+ 753.055156230484160,
+ 758.248113081374300,
+ 763.446610112640200,
+ 768.650616799717000,
+ 773.860102952558460,
+ 779.075038710167410,
+ 784.295394535245690,
+ 789.521141208958970,
+ 794.752249825813460,
+ 799.988691788643450,
+ 805.230438803703120,
+ 810.477462875863580,
+ 815.729736303910160,
+ 820.987231675937890,
+ 826.249921864842800,
+ 831.517780023906310,
+ 836.790779582469900,
+ 842.068894241700490,
+ 847.352097970438420,
+ 852.640365001133090,
+ 857.933669825857460,
+ 863.231987192405430,
+ 868.535292100464630,
+ 873.843559797865740,
+ 879.156765776907600,
+ 884.474885770751830,
+ 889.797895749890240,
+ 895.125771918679900,
+ 900.458490711945270,
+ 905.796028791646340,
+ 911.138363043611210,
+ 916.485470574328820,
+ 921.837328707804890,
+ 927.193914982476710,
+ 932.555207148186240,
+ 937.921183163208070,
+ 943.291821191335660,
+ 948.667099599019820,
+ 954.046996952560450,
+ 959.431492015349480,
+ 964.820563745165940,
+ 970.214191291518320,
+ 975.612353993036210,
+ 981.015031374908400,
+ 986.422203146368590,
+ 991.833849198223450,
+ 997.249949600427840,
+ 1002.670484599700300,
+ 1008.095434617181700,
+ 1013.524780246136200,
+ 1018.958502249690200,
+ 1024.396581558613400,
+ 1029.838999269135500,
+ 1035.285736640801600,
+ 1040.736775094367400,
+ 1046.192096209724900,
+ 1051.651681723869200,
+ 1057.115513528895000,
+ 1062.583573670030100,
+ 1068.055844343701400,
+ 1073.532307895632800,
+ 1079.012946818975000,
+ 1084.497743752465600,
+ 1089.986681478622400,
+ 1095.479742921962700,
+ 1100.976911147256000,
+ 1106.478169357800900,
+ 1111.983500893733000,
+ 1117.492889230361000,
+ 1123.006317976526100,
+ 1128.523770872990800,
+ 1134.045231790853000,
+ 1139.570684729984800,
+ 1145.100113817496100,
+ 1150.633503306223700,
+ 1156.170837573242400,
+ ];
+ return lf[n];
+ }
+}
View
45 d/test.d
@@ -0,0 +1,45 @@
+import std.array;
+import std.conv;
+import std.mathspecial;
+import std.stdio;
+
+import log_factorial: log_factorial;
+
+void main() {
+ for (;;) {
+ string s = readln();
+ if (s == null) {
+ break;
+ }
+ string[] a = split(s);
+ string f = a[0];
+ real x = to!real(a[1]);
+ switch (f) {
+ case "erf":
+ writefln("%.15g", erf(x));
+ break;
+ case "expm1":
+ writefln("%.15g", expm1(x));
+ break;
+ case "phi":
+ writefln("%.15g", normalDistribution(x));
+ break;
+ case "NormalCDFInverse":
+ writefln("%.15g", normalDistributionInverse(x));
+ break;
+ case "Gamma":
+ writefln("%.15g", gamma(x));
+ break;
+ case "LogGamma":
+ writefln("%.15g", lgamma(x));
+ break;
+ case "LogFactorial":
+ writefln("%.15g", log_factorial(cast(uint)x));
+ break;
+ default:
+ writeln("Unknown function: ", f);
+ return;
+ }
+ stdout.flush();
+ }
+}
View
1 gen.py
@@ -14,6 +14,7 @@
"ada": {"name": "Ada", "suffix": ".a"},
"cpp": {"name": "C++", "suffix": ".cpp"},
"csharp": {"name": "C#", "suffix": ".cs"},
+ "d": {"name": "D", "suffix": ".d"},
"erlang": {"name": "Erlang", "suffix": ".erl"},
"go": {"name": "Go", "suffix": ".go"},
"haskell": {"name": "Haskell", "suffix": ".hs"},
View
1 index.template
@@ -91,6 +91,7 @@ The expected output is:
Checking ada... ok
Checking cpp... ok
Checking csharp... ok
+ Checking d... ok
Checking erlang... ok
Checking go... ok
Checking haskell... ok
View
1 test.py
@@ -7,6 +7,7 @@
"ada": "./test",
"cpp": "./test",
"csharp": ["mono", "test.exe"],
+ "d": "./test",
"erlang": ["escript", "test.erl"],
"go": "./test",
"haskell": ["runhaskell", "test.hs"],

0 comments on commit cdc0483

Please sign in to comment.