December 15th, 2013, 6:17 pm
1. I am getting very small rns e-209 etc. when I call C+ from C#. I added Min() and Max() to prng and cal them from C# i.e.(BTW what's the range of values [L,U] of rng()) C++ // new djd //double min() conflict with your result_type!!! double Min() { return std::numeric_limits<double>::min(); } double Max() const { return std::numeric_limits<double>::max(); }C# I // [0,1)double NextDouble(){ double min_ = (*m_nativeClass).Min() ; double max_ = (*m_nativeClass).Max() ; double rng_ = (*m_nativeClass)(); return (rng_ - min_) / (max_ - min_ + 1);}C#, IIpublic class PolarMarsaglia<T> : Rng<T>{ private SitmoWrapper.ManagedWrapper rand; public PolarMarsaglia() { rand = new SitmoWrapper.ManagedWrapper(); } // Seed is from system clock public override T GenerateRn() { dynamic u, v, S; do { u = 2.0 * rand.NextDouble() - 1.0; v = 2.0 * rand.NextDouble() - 1.0; Console.Write(", {0}", rand.NextDouble()); S = u * u + v * v; } while (S >= 1.0); dynamic fac = Math.Sqrt(-2.0 * Math.Log(S) / S); return (T)(u * fac); }}
Last edited by
Cuchulainn on December 14th, 2013, 11:00 pm, edited 1 time in total.