Но что меня интересует, так это то, что компьютер даже пытается делить на ноль или он просто имеет «встроенную защиту», так что, когда он «видит» 0/0, он возвращает ошибку даже до попытки вычислить его?
Поскольку x/0
бессмысленно, точка зрения, компьютеры всегда должны проверять деление на ноль. Здесь есть проблема: программисты хотят вычислять (a+b)/c
без необходимости проверять, имеет ли этот расчет смысл. Внутренний ответ на деление на ноль ЦП + тип числа + операционная система + язык заключается в том, чтобы либо сделать что-то довольно радикальное (например, аварийно завершить программу), либо сделать что-то слишком мягкое (например, создать значение, которое не смысл, такой как IEEE с плавающей точкой NaN
, число, которое "не число").
В обычных условиях программист должен знать, (a+b)/c
имеет ли смысл. В этом контексте нет причин проверять деление на ноль. Если происходит деление на ноль, и если машинный язык + язык реализации + тип данных + ответ операционной системы на это должен привести к аварийному завершению программы, это нормально. Если ответ заключается в создании значения, которое в конечном итоге может загрязнить каждое число в программе, это тоже нормально.
Ни «что-то радикальное», ни «слишком мягкое» не является правильным решением в мире высоконадежных вычислений. Эти ответы по умолчанию могут убить пациента, разбить авиалайнер или взорвать бомбу не в том месте. В среде с высокой надежностью программист, который пишет, (a+b)/c
будет забран до смерти во время проверки кода, или в наше время, возможно, будет забран автоматически до смерти инструментом, который проверяет верботные конструкции. В этой среде этот программист должен вместо этого написать что-то вроде div(add(a,b),c)
(и, возможно, некоторую проверку состояния ошибки). Под капотом div
(и также add
) функции / макросы защищают от деления на ноль (или переполнения в случае add
). То, что влечет за собой эта защита, зависит от конкретной реализации.