Не уверен, что я что-то упускаю, но чтобы избежать округления, и поскольку вам нужна именно эта точность, разве не проще всего работать с целыми числами, а затем преобразовывать их в числа с плавающей точкой по делению?Т.е.
offset = float (random.randint (0,20618)) num = (offset + 37786996.0) / 1000000.0