Что делает строка семян [0] * = 16807 - PullRequest
0 голосов
/ 04 марта 2019

в следующем коде:

float sfrand( int *seed )
{
    float res;

    seed[0] *= 16807;

    *((unsigned int *) &res) = ( ((unsigned int)seed[0])>>9 ) | 0x40000000;

    return( res-3.0f );
}

источник: http://iquilezles.org/www/articles/sfrand/sfrand.htm

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Строка seed[0] *= 16807; является просто ярлыком для seed[0] = seed[0] * 16807;

Вот список похожих конструкций: https://www.programiz.com/c-programming/c-operators

0 голосов
/ 04 марта 2019

*= - составной оператор для умножения.В этом операторе результат, который левый операнд умножает на правый операнд, будет сохранен с левым операндом.Таким образом, в этом операторе seed[0] *= 1680; левый операнд - это seed [0], правый операнд - 1680. После выполнения этого оператора seed[0] будет равен seed[0] * 1680.Это аналогичное утверждение для этого:

 seed[0] = seed[0] * 1680;

У нас есть несколько составных операторов: +=, -=, /=, ..., которые работают в том же поведении.

0 голосов
/ 04 марта 2019

seed[0] совпадает с *seed, то есть первым целым числом (возможно, единственным, если оно не указывает на массив), на которое указывает указатель seed.

*= оператор - это оператор «присваивание по продукту»,

seed[0] *= 16807; - это то же самое, что и

*seed = *seed * 16807;, что и делает строка, о которой вы спрашиваете.

ВесьФункция - это простой алгоритм генерации псевдослучайных чисел.Цель изменения начального числа состоит в том, что при следующем вызове будет получено другое псевдослучайное число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...