Будет ли сравнение двух чисел с плавающей запятой потреблять больше процессорного времени, чем два целых числа? - PullRequest
0 голосов
/ 15 ноября 2009

Будет ли сравнение двух чисел с плавающей запятой потреблять больше процессорного времени, чем два целых числа?

Ответы [ 3 ]

0 голосов
/ 15 ноября 2009

IIRC, стандартные IEEE 754 числа с плавающей запятой хранятся таким образом, что если вы рассматриваете их как целые числа, они сравниваются одинаково:

| знак | показатель | Значение и |

Значение слова (слово, которое я полностью забыл до обращения к статье в Википедии) - это первые несколько значащих цифр числа.

Если два числа с плавающей точкой a < b, то у вас есть одно из:

  • a отрицательно, b не отрицательно;
  • оба знака одинаковые, но показатель a показатель <<code>b; или
  • и тот же знак и показатель степени, но a <<code>b.

Таким образом, вы можете просто взять 32 бита каждого числа как целые числа и сравнить их, используя обычную целочисленную арифметику. Я не знаю, если это то, что компиляторы делают на практике. Есть несколько специальных представлений для определенных чисел, и эти крайние случаи могут означать, что процессор FP должен делать это по-другому.

См. http://en.wikipedia.org/wiki/Floating_point#Internal_representation

0 голосов
/ 31 октября 2011

обработка числа с плавающей запятой, даже если рассматривать его как целое число, потребует больше, потому что число с плавающей запятой больше, на php я тестировал один раз, просто разделив 1 на 3–32 000 000 десятичных цифр, и мне потребовалось около 0,33 секунды, разделив 1 на 3–10 десятичных знаков цифры заняли 0,0002 или что-то в этом роде (эти значения могут быть немного неправильными, но в зависимости от размера поплавка это может занять много времени, и работа с такими большими поплавками займет уйму времени, если вы хотите быть более конкретным и протестировать этот предмет было бы идеально, потому что часть времени, которое я ждал, могла быть из-за скорости памяти или чего-то в этом роде, а не процессора)

в любом случае, учитывая, что вы не будете достаточно сумасшедшими, чтобы работать с числами с более чем 50 знаками после запятой, с вами все будет в порядке

0 голосов
/ 15 ноября 2009

С современными процессорами (исключая, может быть, встроенные машины и Atom) вы не можете реально прогнозировать, насколько быстрым может быть одиночное вмешательство в код.

Прежде всего, он может быть удален компилятором, если известно, что он не имеет значения, он может быть переписан компилятором во что-то другое, что, как известно, быстрее и т. Д. Это одна ловушка.

Во-вторых, процессоры могут выполнять более одной инструкции за цикл или выполнять их асинхронно и выполнять другие действия в ожидании FPU и т. Д.

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

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

...