Все забыли Паскаль?
1/6доходность 0.1666666...(с любой точностью поддерживается).
1 div 6 доходность 0
Можно утверждать, является ли правило C ошибкой. Почти все арифметические операторы Си, в которых операнды имеют одинаковый тип, дают результат того же типа. Есть что-то, что нужно сказать для последовательности.
Кроме того, поскольку C в первую очередь нацелен на код системного уровня, большинство программ на C вообще не использует плавающую точку. Одно время, случайное добавление кода с плавающей точкой в программу, которая иначе не нуждалась в этом, могло быть серьезной проблемой. Это, вероятно, все еще имеет место для небольших встроенных систем, которые, опять же, являются основной целью для C.
В большинстве программ на C усечение целочисленного деления, вероятно, как раз то, что вам нужно.
Если 1 / 6получен результат с плавающей точкой в C, то:
- Это было бы несоответствием в языке.
- Стандарт должен был бы сделать произвольный выбор того, какой тип с плавающей точкой использовать для результата (
doubleможет показаться естественным выбором, но вы могли бы предпочесть дополнительную точность long double)
- В языке все равно должна быть операция целочисленного деления; выполнение сложения с плавающей точкой, а затем усечение, вероятно, будет недостаточно.
C мог бы предоставить отдельные операторы для двух видов деления, но второй пункт выше все равно будет применяться: какой из трех типов с плавающей точкой будет использоваться для результата? И поскольку достаточно просто получить деление с плавающей запятой, если вам это нужно (используйте константу с плавающей запятой для одного или обоих операндов или приведите один или оба операнда к типу с плавающей запятой), очевидно, что Я считаю это важным.
В версии руководства C на 1974 год (это за 4 года до публикации первого издания K & R) Ричи даже не упоминает о возможной путанице:
Двоичный / оператор указывает на деление. Применяются те же соображения, что и для умножения
который говорит, что если оба операнда имеют тип intили char, результат имеет тип int.
Да, это является источником путаницы для некоторых программистов на C, особенно начинающих, но C не известен тем, что он очень новичок.