Ну тут не только то, что дешевле, вовсе не факт, что Math.random() * Math.random() дают правильное распределение - надо тестировать.
А по поводу diehard тестов я не понял замечание - это как бы тесты для любого рандома, на чем хочешь пиши - они тестируют распределение. Т.е. есть определенные требования к равномерному распределению, например, проблема дня рождения (если предположить что вероятность того, что любой день в году может быть днем рождения кого-то из участников группы - нужно определенное количество человек для того, чтобы вероятность достигла определенного процента). Ну вот если бы приведенный алгоритм проверили таким тестом и получилось бы что вероятность 50% наступает не в группе из 10 человек, а из 5, то это значило бы, что алгоритм плохой (существуют коллизии) - ну а дальше уже, смотря для чего использовать. Если для игры в покер - то плохо, если выбрать в какой случайный цвет покрасить текст на открытке - то без разницы
