LINUX.ORG.RU

История изменений

Исправление PPP328, (текущая версия) :

В такой вымышленной ситуации конечно странно, что есть float но нет ints, которые являются основой для вычисления floats-типов. Ну ок, даже если нет битовых операций, то их можно заменить:

(ниже для ints, для конкретно вашей реализации floats обратитесь к стандарту на лично ваш флоат (например IEE 754) чтобы увидеть как надо перераспределить биты.

  • >> N это деление на 2^N
  • << N это умножение на 2^N
  • a & b = (a + b - (a * b)) / 2
  • a | b = (a + b + (a * b)) / 2
  • Инверсия строится в зависимости от размеров ваших флоатов, man IEE 754, чтобы посмотреть какие точно биты вам надо перевернуть

Строите примитивы типа NOT, AND, OR, потом XOR, NAND, а на основе последних двух можно вообще вывести абсолютно всю булеву логику.

Исходная версия PPP328, :

В такой вымышленной ситуации конечно странно, что есть float но нет ints, которые являются основой для вычисления floats-типов. Ну ок, даже если нет битовых операций, то их можно заменить:

  • >> N это деление на 2^N
  • << N это умножение на 2^N
  • a & b = (a + b - (a * b)) / 2
  • a | b = (a + b + (a * b)) / 2
  • Инверсия строится в зависимости от размеров ваших флоатов, man IEE 754, чтобы посмотреть какие точно биты вам надо перевернуть

Строите примитивы типа NOT, AND, OR, потом XOR, NAND, а на основе последних двух можно вообще вывести абсолютно всю булеву логику.