Using NaN instead of 0.0

This commit is contained in:
Thorsten Sommer 2020-09-26 12:45:09 +02:00
parent 9ba0eb9478
commit 30457a7f62
5 changed files with 6 additions and 5 deletions

View File

@ -1,3 +1,4 @@
using System;
using System.Threading;
using System.Threading.Tasks;
@ -24,7 +25,7 @@ namespace FastRng.Double.Distributions
public async ValueTask<double> GetDistributedValue(CancellationToken token)
{
if (this.Random == null)
return 0.0;
return System.Double.NaN;
return await this.Random.NextNumber(new Gamma{ Shape = 0.5 * this.DegreesOfFreedom, Scale = 2.0 }, token);
}

View File

@ -25,7 +25,7 @@ namespace FastRng.Double.Distributions
public async ValueTask<double> GetDistributedValue(CancellationToken token)
{
if (this.Random == null)
return 0.0;
return System.Double.NaN;
if(this.Mean == 1.0)
return -Math.Log(await this.Random.GetUniform(token));

View File

@ -29,7 +29,7 @@ namespace FastRng.Double.Distributions
public async ValueTask<double> GetDistributedValue(CancellationToken token)
{
if (this.Random == null)
return 0.0;
return System.Double.NaN;
// Implementation based on "A Simple Method for Generating Gamma Variables"
// by George Marsaglia and Wai Wan Tsang. ACM Transactions on Mathematical Software

View File

@ -27,7 +27,7 @@ namespace FastRng.Double.Distributions
public async ValueTask<double> GetDistributedValue(CancellationToken token = default)
{
if (this.Random == null)
return 0.0;
return System.Double.NaN;
var u1 = await this.Random.GetUniform(token);
var u2 = await this.Random.GetUniform(token);

View File

@ -7,6 +7,6 @@ namespace FastRng.Double.Distributions
{
public IRandom Random { get; set; }
public async ValueTask<double> GetDistributedValue(CancellationToken token = default) => this.Random == null ? 0.0 : await this.Random.GetUniform(token);
public async ValueTask<double> GetDistributedValue(CancellationToken token = default) => this.Random == null ? System.Double.NaN : await this.Random.GetUniform(token);
}
}