2015-03-17 3 views
3

Так что, если мы скажем, что язык программирования рассчитан для этого: X/1, где X - любое число. Действительно ли они вычисляют выход или проверяют/игнорируют 1 и возвращают X?Подраздел 1 на языках программирования

Кроме того, при кодировании что-то вроде выше, стоит ли проверять, является ли делитель равным 1, или это быстрее, чтобы просто позволить ему вычислить разделение в любом случае?

Спасибо


Для разработки этого вопроса: что быстрее?

$result = $number/$divisor; 

или

$result = $divisor > 1 ? $number/$divisor : $number; 
+0

один является степенью 2, поэтому он должен быть переведен в правый сдвиг (от нуля), который, в свою очередь, является не-оператором. я бы догадался. – sp2danny

+0

Компилятор/оптимизатор избавится от него. Если это параметр времени выполнения, вы все еще не хотите проверять, потому что обычно у вас редко 1 в качестве делителя. Btw, деление обычно выполняется с помощью некоторого итерационного алгоритма. Он будет сходиться очень быстро при использовании 1. Таким образом, это не так уж и важно. – usr1234567

+0

@ sp2danny: Действителен только тогда, когда компилятор знает о значении. Для входа пользователя вам понадобится JIT, чтобы это выяснить. – usr1234567

ответ

2

Большинство языков программирования, вероятно, не проверять специальных делителей (за исключением 0).

Процессоры очень быстрые в делении в настоящее время, поэтому его не стоит проверять заранее. Проверки могут занять больше времени, чем фактическое разделение.

+1

Большинство компиляторов DO проверяют специальные делители, если это может произойти compiletime – sp2danny

0

Поскольку проверка и прыжок + фактическое разделение было бы более инструкциями cpu, чем просто деление, я вполне уверен, что это будет сделано.

Если ваш код является переменным/1 (1 является статическим), то компилятор, скорее всего, оптимизирует его.

2

Сравнивая примеры (по крайней мере для PHP):

<?php 
$divisor = 1; 
for ($i=0; $i<100000000; $i ++) { 
if ($divisor != 1) 
    $a = $i/$divisor; 
else 
    $a = $i; 
} 

принимает 6.9s на моей машине. Другой:

<?php 
$divisor = 1; 
for ($i=0; $i<100000000; $i ++) { 

    $a = $i/$divisor; 
} 

принимает только 5.2s

Так, чтобы ответить на последний вопрос, который один работает быстрее: просто дайте ему вычислить разделение :-)

+0

, разве вы не имеете в виду 'if ($ divisor! = 1) '? – neuhaus

+0

Вы правы, @neuhaus. Я исправил код и изменил время. Тем не менее, все же быстрее не сравнивать. –

Смежные вопросы