Собственно вызываю $CardCookie = mt_rand(6103006430040008016, 6103006430040020000); , на выходе при генерации некоторых карт вылезает за указанный диапазон, замечено что на 24 значения где-то.
Как лечить?
Собственно вызываю $CardCookie = mt_rand(6103006430040008016, 6103006430040020000); , на выходе при генерации некоторых карт вылезает за указанный диапазон, замечено что на 24 значения где-то.
Как лечить?
mt_getrandmax(); - покажет, не превышен ли порог максимально возможного рандомного числа возвращаемого mt_rand. Если да, mt_rand может давать погрешность.
mt_rand(min, max); (max - min) <= mt_getrandmax()
Число слишком большое и не представимо точно в типе double.
Можно заметить, что на Си++ выводится другое значение: https://ideone.com/2pJ4uh
printf("%.0f", 6103006430040020000.);
6103006430040019968
Связанный вопрос: Отображение числа 9223372036854775807
Диапазон min - max не должен выходить за границы mt_getrandmax(). То есть (max - min) <= mt_getrandmax(). В противном случае, mt_rand() может возвращать менее качественные случайные числа.– Алексей Шиманский Dec 29 '17 at 14:161030064300и генерируйте только оставшуюся часть от 40008016 до 40020000. В ответ возвращайте строку, а не число, полученную конкатенацией строки1030064300и результата генерации. – Visman Dec 29 '17 at 14:17