On Tue, Oct 29, 2019 at 4:45 PM Twilight via Digitalmars-d-learn
<digitalmars-d-learn@puremagic.com> wrote:
>
> D calculation:
>
>    writefln("%12.2F",log(1-0.9999)/log(1-(1-0.6)^^20));
>
> 837675572.38
>
> C++ calculation:
>
>    cout<<setprecision(12)<< (log(1-0.9999)/log(1-pow(1-0.6,20)))
> <<'\n';
>
> 837675573.587
>
> As a second data point, changing 0.9999 to 0.75 yields
> 126082736.96 (Dlang) vs 126082737.142 (C++).
>
> The discrepancy stood out as I was ultimately taking the ceil of
> the results and noticed an off by one anomaly. Testing with
> octave, www.desmos.com/scientific, and libreoffice(calc) gave
> results consistent with the C++ result. Is the dlang calculation
> within the error bound of what double precision should yield?

If you use gdc or ldc you will get same results as c++, or you can use
C log directly:

import std.stdio;
import std.math : pow;
import core.stdc.math;

void main()
{
     writefln("%12.3F",log(1-0.9999)/log(1-(1-0.6)^^20));
}

Reply via email to