乱数クラスのシリアライズ
今日も通常の出社日。
自作の乱数クラスをシリアライズしようとしたが、Randomをメンバに持っていて行き詰った。そこで、RandomをMersenneTwisterに代えて、以下を追加した。
http://takel.jp/mt/
/// <summary>複製</summary> public object Clone() { MersenneTwister r = new MersenneTwister(); r.mti = mti; r.mt = (uint[])mt.Clone(); return r; } /// <summary>文字列表現</summary> public string Expression { get {return ToString();} set { if (value.Length != 4+N*4*8/6) throw new ArgumentException(); mti = short.Parse(value.Substring(0, 4), System.Globalization.NumberStyles.HexNumber); byte[] b = Convert.FromBase64String(value.Substring(4)); for (int i=0;i<mt.Length;++i) mt[i] = BitConverter.ToUInt32(b, i*4); } } /// <summary>文字列化</summary> public override string ToString() { byte[] b = new byte[mt.Length*4]; for (int i=0;i<mt.Length;++i) BitConverter.GetBytes(mt[i]).CopyTo(b, 4*i); return mti.ToString("x4") + Convert.ToBase64String(b); }