// Estimate π using random integers
void main()
{
import std.stdio, std.random, std.math, std.conv;
ulong gcd(ulong a, ulong b)
{
if (b == 0) return a;
return gcd(b, a % b);
}
Mt19937_64 gen; gen.seed(unpredictableSeed!ulong);
int pairCount = 1_000_000;
int coprimeCount = 0;
ulong a, b;
for (int i = 0; i < pairCount; i++) {
a = gen.front; gen.popFront();
b = gen.front; gen.popFront();
if (gcd(a, b) == 1) coprimeCount++;
}
double prob = coprimeCount.to!double / pairCount.to!double;
writefln("π ≈ %.15f", sqrt(6.0 / prob));
}
Thread overview | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
April 27, 2021 [your code here] | ||||
---|---|---|---|---|
| ||||
April 27, 2021 Re: [your code here] | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jeff Pratt | On Tuesday, 27 April 2021 at 21:04:19 UTC, Jeff Pratt wrote: >
Nice example! A couple small improvements:
|
April 28, 2021 Re: [your code here] | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul Backus | 28.04.2021 00:43, Paul Backus пишет: > // Estimate π using random integers > void main() > { > import std.stdio, std.random, std.math, std.conv, std.numeric; > Mt19937_64 gen; gen.seed(unpredictableSeed!ulong); > int pairCount = 1_000_000; > int coprimeCount = 0; > ulong a, b; > foreach (int i; 0 .. pairCount) { > a = gen.front; gen.popFront(); > b = gen.front; gen.popFront(); > if (gcd(a, b) == 1) coprimeCount++; > } > double prob = coprimeCount.to!double / pairCount.to!double; > writefln("π ≈ %.15f", sqrt(6.0 / prob)); > } Functional style ```D // Estimate π using random integers void main() { import std.algorithm, std.stdio, std.random, std.math, std.conv, std.numeric, std.range; Mt19937_64 gen; gen.seed(unpredictableSeed!ulong); int pairCount = 1_000_000; double coprimeCount = zip(gen, gen.dropOne) .take(pairCount) .map!((a)=>(gcd(a[0], a[1]) == 1) ? 1 : 0) .sum(0); auto prob = coprimeCount / pairCount; writefln("π ≈ %.15f", sqrt(6.0 / prob)); } ``` |
April 28, 2021 Re: [your code here] | ||||
---|---|---|---|---|
| ||||
Posted in reply to drug | On Wednesday, 28 April 2021 at 07:56:50 UTC, drug wrote: >
Alternatively:
|
April 28, 2021 Re: [your code here] | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul Backus | 28.04.2021 15:34, Paul Backus пишет:
> On Wednesday, 28 April 2021 at 07:56:50 UTC, drug wrote:
>> ```D
>> .map!((a)=>(gcd(a[0], a[1]) == 1) ? 1 : 0)
>> .sum(0);
>> ```
>
> Alternatively:
>
> ```d
> .filter!(pair => gcd(pair[0], pair[1]) == 1)
> .count;
> ```
it's better alternative!
|
April 29, 2021 Re: [your code here] | ||||
---|---|---|---|---|
| ||||
Posted in reply to drug | On 28.04.21 15:21, drug wrote:
> 28.04.2021 15:34, Paul Backus пишет:
>> On Wednesday, 28 April 2021 at 07:56:50 UTC, drug wrote:
>>> ```D
>>> .map!((a)=>(gcd(a[0], a[1]) == 1) ? 1 : 0)
>>> .sum(0);
>>> ```
>>
>> Alternatively:
>>
>> ```d
>> .filter!(pair => gcd(pair[0], pair[1]) == 1)
>> .count;
>> ```
>
> it's better alternative!
```d
.count!(pair => gcd(pair[0], pair[1]) == 1);
```
|
April 29, 2021 Re: [your code here] | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timon Gehr | 29.04.2021 15:26, Timon Gehr пишет:
> On 28.04.21 15:21, drug wrote:
>> 28.04.2021 15:34, Paul Backus пишет:
>>> On Wednesday, 28 April 2021 at 07:56:50 UTC, drug wrote:
>>>> ```D
>>>> .map!((a)=>(gcd(a[0], a[1]) == 1) ? 1 : 0)
>>>> .sum(0);
>>>> ```
>>>
>>> Alternatively:
>>>
>>> ```d
>>> .filter!(pair => gcd(pair[0], pair[1]) == 1)
>>> .count;
>>> ```
>>
>> it's better alternative!
>
>
> ```d
> .count!(pair => gcd(pair[0], pair[1]) == 1);
> ```
it's the best! :)
|
April 29, 2021 Re: [your code here] | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul Backus | On Wednesday, 28 April 2021 at 12:34:51 UTC, Paul Backus wrote: >On Wednesday, 28 April 2021 at 07:56:50 UTC, drug wrote: >
Alternatively:
Not sure if it's trolly or more elegant. |
April 29, 2021 Re: [your code here] | ||||
---|---|---|---|---|
| ||||
Posted in reply to Q. Schroll | On Thursday, 29 April 2021 at 14:33:06 UTC, Q. Schroll wrote: >
Not sure if it's trolly or more elegant. I fear that new users might already be swamped with functional style and won't understand what's going on here. (But nice anyway.) |
April 29, 2021 Re: [your code here] | ||||
---|---|---|---|---|
| ||||
Posted in reply to Berni44 | On Thursday, 29 April 2021 at 15:53:43 UTC, Berni44 wrote: >I fear that new users might already be swamped with functional style and won't understand what's going on here. (But nice anyway.) I think the range-based functional style of D is overrepresented. When I first landed on the homepage, I saw the "Sort lines" example which scared me off. It looked totally unfamiliar, I thought D was more akin to Scala/Haskell than the Java/C-like languages I was most familiar with. Only later did I figure out that D really is a newer C/C++ like the name implies, and the range programming is just Phobos acting on top of it. In all the examples, there is not a single |