On date Wednesday 2024-01-03 12:20:12 +0100, Michael Koch wrote: > > Possible address trac issue: > > > http://trac.ffmpeg.org/ticket/10763 >
> I don't like the random generator as it is, because the first two random > numbers > are very close to zero, as can be shown with this command line: > ffmpeg -loglevel repeat -f lavfi -i nullsrc=size=1x1,format=gray -vf > "geq=lum='print(random(0));print(random(0));print(random(0));print(random(0))'" > -frames 1 -y out.png 0.000000 0.000091 0.285346 0.929202 This behaviour can > be improved by inizializing the generator with a large number as seed value. OTOH this seems only to happen with 0, which is also the default seed value used by the random generator (since all variables are set to 0). $ echo "st(0, UINT64_MAX/3); st(1, 10); while(gt(ld(1), 0), print(random(0)); st(1, ld(1)-1))" | tools/ffeval 0.666667 0.333374 0.616496 0.023515 0.931519 0.317050 0.393449 0.969531 0.842403 0.129183 => 0.000000 $ echo "st(0, UINT64_MAX/2); st(1, 10); while(gt(ld(1), 0), print(random(0)); st(1, ld(1)-1))" | tools/ffeval 0.500000 0.500091 0.785217 0.673490 0.103073 0.829142 0.144794 0.508226 0.735092 0.655693 => 0.000000 $ echo "st(0, UINT64_MAX/7); st(1, 10); while(gt(ld(1), 0), print(random(0)); st(1, ld(1)-1))" | tools/ffeval 0.285714 0.571498 0.855853 0.398648 0.009648 0.802972 0.608529 0.007854 0.405221 0.959683 => 0.000000 $ echo "st(0, UINT64_MAX/13); st(1, 10); while(gt(ld(1), 0), print(random(0)); st(1, ld(1)-1))" | tools/ffeval 0.384615 0.923180 0.593572 0.754748 0.415309 0.067556 0.905708 0.928599 0.448587 0.772728 => 0.000000 $ echo "st(0, UINT64_MAX/6); st(1, 10); while(gt(ld(1), 0), print(random(0)); st(1, ld(1)-1))" | tools/ffeval 0.833333 0.166733 0.451010 0.605203 0.240940 0.007228 0.778975 0.354595 0.413333 0.898240 => 0.000000 $ echo "st(0, 0); st(1, 10); while(gt(ld(1), 0), print(random(0)); st(1, ld(1)-1))" | tools/ffeval 0.000000 0.000091 0.285346 0.929202 0.239519 0.140744 0.686872 0.275489 0.537404 0.583466 => 0.000000 (BTW it could be handy to have an inc and dec function as well to simplify this kind of loops.) > I'm not sure if it's a good idea to share the same variables for ld() and > st() (as double) and random() (as unsigned int). All functions work with double precision floating point numbers, but they can be used also to represent integers, but with a few limitations (e.g. you cannot represent many integers with a float exactly). > Wouldn't it be better to use separate variables for random()? > Michael One idea would be to use a random_seed(idx) function, but this would mean that we need to use separate registers only for the random function, and this would also break backward compatibility. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".