diff --git a/src/types/array.js b/src/types/array.js
index 6b94baf7191ccbcf4b1d75ad1121c1a1e958e051..96efb1184b7ce78defcb0d7fc8122413bb39c08f 100644
--- a/src/types/array.js
+++ b/src/types/array.js
@@ -83,7 +83,7 @@ function arrayType(value, path, resolve, traverseCallback) {
   if (optionalsProbability !== false) {
     length = fixedProbabilities
       ? Math.round(maxItems * optionalsProbability)
-      : random.number(minItems, maxItems * optionalsProbability);
+      : random.number(minItems, maxItems) * optionalsProbability;
   }
 
   // TODO below looks bad. Should additionalItems be copied as-is?