16
Сен
2012

Метод середины квадратов с помощью побитового сдвига

Добрый день. Подскажите, как реализовать метод середин квадратов на си. Есть пример кода функции на паскале:

var xi: longint; {глобальная переменная; сюда изначально 
            должна быть помещена затравка}
function rrsch:real;
begin
  xi:=((xi*xi) shr 7) and $3FFF;    {28 бит - квадрат, 14 бит - число}
  if xi=0 then begin
    Random( …);     {заносит в RandSeed очередное псевдослучайное число - затравку}
    xi:=RandSeed and $3FFF;
  end;
  rrsch:=xi/$4000;          {двоичное 01000000 00000000}
end;

Если, например, брать середину квадрата от числа 4824, то 4824^2=23270976 нам нужно будет взять из этого числа 2709. Как я понял это нужно сделать с помощью оператора побитового сдвига, однако реализовать его у меня так и не получилось.

Источник: https://ru.stackoverflow.com/questions/146079/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4-%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B-%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%BE%D0%B2-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-%D0%BF%D0%BE%D0%B1%D0%B8%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D1%81%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0

Тебе может это понравится...

Добавить комментарий