先修复一下,错误的场景 删除不必要的钓场资产 修复into场景 update:更新meta文件,修复报错 update:修复资源 修复第一章节建造 修复建造第三章 update:删除多余内容 update:更新README.md update:还原图标 update:更新README update:更新配置
118 lines
3.6 KiB
C#
118 lines
3.6 KiB
C#
namespace System
|
|
{
|
|
public class Beta
|
|
{
|
|
//[UnityEditor.MenuItem("Tools/TestBeta")]
|
|
//void TestBeta()
|
|
//{
|
|
// List<double> doubles = new List<double>();
|
|
// for (int i = 0; i < 10000; i++)
|
|
// {
|
|
// doubles.Add(Beta.Sample(100, 900));
|
|
// }
|
|
// doubles.Sort();
|
|
// for (int i = 0; i < doubles.Count; i++)
|
|
// {
|
|
// int s = (int)(doubles[i] * 100);
|
|
// Debug.Log(s);
|
|
// }
|
|
//}
|
|
static double GammaSampleUnchecked(System.Random rnd, double shape, double rate)
|
|
{
|
|
if (double.IsPositiveInfinity(rate))
|
|
{
|
|
return shape;
|
|
}
|
|
|
|
double num = shape;
|
|
double num2 = 1.0;
|
|
if (shape < 1.0)
|
|
{
|
|
num = shape + 1.0;
|
|
num2 = System.Math.Pow(rnd.NextDouble(), 1.0 / shape);
|
|
}
|
|
|
|
double num3 = num - 1.0 / 3.0;
|
|
double num4 = 1.0 / System.Math.Sqrt(9.0 * num3);
|
|
double num6;
|
|
double num7;
|
|
double num5;
|
|
do
|
|
{
|
|
num5 = NormalSampleUnchecked(rnd, 0.0, 1.0);
|
|
for (num6 = 1.0 + num4 * num5; num6 <= 0.0; num6 = 1.0 + num4 * num5)
|
|
{
|
|
num5 = NormalSampleUnchecked(rnd, 0.0, 1.0);
|
|
}
|
|
|
|
num6 = num6 * num6 * num6;
|
|
num7 = rnd.NextDouble();
|
|
num5 *= num5;
|
|
if (num7 < 1.0 - 0.0331 * num5 * num5)
|
|
{
|
|
return num2 * num3 * num6 / rate;
|
|
}
|
|
}
|
|
while (!(System.Math.Log(num7) < 0.5 * num5 + num3 * (1.0 - num6 + System.Math.Log(num6))));
|
|
return num2 * num3 * num6 / rate;
|
|
}
|
|
static double NormalSampleUnchecked(System.Random rnd, double mean, double stddev)
|
|
{
|
|
double x;
|
|
double y;
|
|
while (!PolarTransform(rnd.NextDouble(), rnd.NextDouble(), out x, out y))
|
|
{
|
|
}
|
|
|
|
return mean + stddev * x;
|
|
}
|
|
static bool PolarTransform(double a, double b, out double x, out double y)
|
|
{
|
|
double num = 2.0 * a - 1.0;
|
|
double num2 = 2.0 * b - 1.0;
|
|
double num3 = num * num + num2 * num2;
|
|
if (num3 >= 1.0 || num3 == 0.0)
|
|
{
|
|
x = 0.0;
|
|
y = 0.0;
|
|
return false;
|
|
}
|
|
|
|
double num4 = Math.Sqrt(-2.0 * Math.Log(num3) / num3);
|
|
x = num * num4;
|
|
y = num2 * num4;
|
|
return true;
|
|
}
|
|
public static double Sample(double alpha, double beta)
|
|
{
|
|
System.Random rng = new System.Random();
|
|
double num;
|
|
double num2;
|
|
if (alpha == beta)
|
|
{
|
|
num = GammaSampleUnchecked(rng, alpha, 1.0);
|
|
num2 = GammaSampleUnchecked(rng, beta, 1.0);
|
|
if (num == 0.0 && num2 == 0.0)
|
|
{
|
|
if (rng.NextDouble() < 0.5f)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
do
|
|
{
|
|
num = GammaSampleUnchecked(rng, alpha, 1.0);
|
|
num2 = GammaSampleUnchecked(rng, beta, 1.0);
|
|
}
|
|
while (num == 0.0 && num2 == 0.0);
|
|
}
|
|
|
|
return num / (num + num2);
|
|
}
|
|
}
|
|
} |