Я хотел бы узнать науку, лежащую в основе следующего. 32-битное значение сдвигается влево 32 раза в 64-битном типе, тогда выполняется деление. так как точность содержится в последних 32 битах, и для получения значения в виде числа с плавающей запятой я могу умножить на 1 по максимальному значению 32-битного беззнакового числа.битмаскировка и двоичная арифметика
phase = ((uint64) 44100 << 32)/48000;
(phase & 0xffffffff) * (1.0f/4294967296.0f);// == 0.918749988
же, как
(float)44100/48000;// == 0.918749988
вы уверены, что это '0xffffff' и не' 0xffffffff'? – Wintermute
** - 1 ** Не настоящий код. При попытке вашего первого примера в Python выражение '(phase & 0xffffff) * (1.0/4294967296.0)' дает '0.0007812499534338713'. –
Для примера, который вы где-то видели, обратите внимание, что максимальное значение 32-битного int без знака равно 2^32-1, что очень близко к множителю 2^32, который вы ввели. Таким образом, результаты (для этого оригинального примера) будут почти одинаковыми. –