Чи всі забули Паскаля?
1/6врожайність 0.1666666...(до будь-якої точності підтримується).
1 div 6 врожайність 0
Сперечається, чи правило C є помилкою. Практично всі арифметичні оператори С, де операнди одного типу, дають результат того ж типу. Щось слід сказати для послідовності.
Крім того, оскільки C в основному орієнтований на код на системному рівні, більшість програм C взагалі не використовують плаваючу крапку. Свого часу випадкове додавання коду з плаваючою комою до програми, яка інакше не потребувала, може стати серйозною проблемою. Це, мабуть, все-таки так, і для малих вбудованих систем, які, знову ж таки, є головною ціллю для C.
У більшості програм C, обрізання цілого поділу - це, мабуть, саме те, що вам потрібно.
Якщо ви 1 / 6отримаєте результат з плаваючою комою в C, то:
- Це було б невідповідність мови.
- Стандарт повинен був зробити довільний вибір, який тип з плаваючою комою використовувати для результату (
doubleможе здатися природним вибором, але ви можете віддати перевагу додатковій точності long double)
- Мова все ще повинна мати операцію для цілого поділу; виконання додавання з плаваючою комою, а потім обрізання, ймовірно, не буде досить гарним.
C міг би забезпечити окремі оператори для двох видів поділу, але другий пункт вище все-таки застосовуватиметься: який із трьох типів з плаваючою комою буде використаний для результату? А оскільки отримати ділення з плаваючою комою досить просто, якщо він вам потрібен (використовуйте константу з плаваючою комою для одного або обох операндів, або переведіть один або обидва операнди на тип з плаваючою комою), мабуть, це не було ' t вважав це важливим.
У версії посібника С 1974 року (це за 4 роки до виходу першого видання K&R) Рітчі навіть не згадує можливу плутанину:
Двійковий / оператор вказує на поділ. Застосовуються ті ж міркування типу, що й для множення
що говорить, що якщо обидва операнди типу intабо char, результат має тип int.
Так, це джерело плутанини для деяких програмістів на C, особливо для початківців - але C не відзначається тим, що він дуже сприятливий для початківців.