diff --git a/src/Numerics/Random/MersenneTwister.cs b/src/Numerics/Random/MersenneTwister.cs
index bd8fed69..6cce7d08 100644
--- a/src/Numerics/Random/MersenneTwister.cs
+++ b/src/Numerics/Random/MersenneTwister.cs
@@ -341,6 +341,17 @@ namespace MathNet.Numerics.Random
return int31;
}
+ ///
+ /// Fills the elements of a specified array of bytes with random numbers in full range, including zero and 255 ().
+ ///
+ protected sealed override void DoSampleBytes(byte[] buffer)
+ {
+ for (var i = 0; i < buffer.Length; i++)
+ {
+ buffer[i] = (byte)(genrand_int32() % 256);
+ }
+ }
+
/* ///
/// Generates a random number on [0,1) with 53-bit resolution.
///
diff --git a/src/Numerics/Random/Xorshift.cs b/src/Numerics/Random/Xorshift.cs
index 61f0e949..1c64226f 100644
--- a/src/Numerics/Random/Xorshift.cs
+++ b/src/Numerics/Random/Xorshift.cs
@@ -266,7 +266,7 @@ namespace MathNet.Numerics.Random
///
/// Returns a random 32-bit signed integer greater than or equal to zero and less than
///
- protected override int DoSampleInteger()
+ protected sealed override int DoSampleInteger()
{
var t = (_a * _x) + _c;
_x = _y;
@@ -283,6 +283,22 @@ namespace MathNet.Numerics.Random
return int31;
}
+ ///
+ /// Fills the elements of a specified array of bytes with random numbers in full range, including zero and 255 ().
+ ///
+ protected sealed override void DoSampleBytes(byte[] buffer)
+ {
+ for (var i = 0; i < buffer.Length; i++)
+ {
+ var t = (_a * _x) + _c;
+ _x = _y;
+ _y = _z;
+ _c = t >> 32;
+ _z = t & 0xffffffff;
+ buffer[i] = (byte)(_z % 256);
+ }
+ }
+
///
/// Fills an array with random numbers greater than or equal to 0.0 and less than 1.0.
///