Что касается деления на ноль, стандарты гласят:
C99 6.5.5p5 — Результатом оператора / является частное от деление первого операнда на второй; Результатом оператора % является остаток. В обеих операциях, если значение второго операнда равно нулю, поведение не определено.
C++03 5.6.4 — Бинарный оператор / возвращает частное, а бинарный оператор % возвращает остаток от деления первого выражения на второе. Если второй операнд / или % равен нулю, поведение не определено.
Если бы мы приняли приведенные выше абзацы за чистую монету, ответ, очевидно, Неопределенное поведение для обоих языков. Однако, если мы посмотрим дальше в стандарте C99, мы увидим следующий параграф, который кажется противоречивым(1):
C99 7.12p4 - Макрос INFINITY расширяется до постоянного выражения типа float, представляющего положительную или беззнаковую бесконечность, если таковая имеется;
Есть ли в стандартах какой-либо вид золотого правила, согласно которому неопределенное поведение не может быть заменено (потенциально) противоречивым утверждением? За исключением этого, я не думаю, что было бы неразумно заключить, что если ваша реализация определяет макрос INFINITY, то деление на ноль определяется как таковое. Однако если ваша реализация не определяет такой макрос, поведение будет неопределенным.
Мне интересно, каков консенсус (если таковой имеется) ) по этому вопросу для каждого из двух языков. Изменится ли ответ, если мы будем говорить о делении целых чисел int i = 1/0 и о делении с плавающей запятой float i = 1.0/0.0 ?
Примечание (1) В стандарте C++03 говорится о библиотеке , которая включает макрос INFINITY.
Подробнее здесь: https://stackoverflow.com/questions/300 ... c-and-or-c
Деление на ноль: неопределенное поведение или реализация, определенная в C и/или C++? ⇐ C++
Программы на C++. Форум разработчиков
1731898816
Anonymous
Что касается деления на ноль, стандарты гласят:
C99 6.5.5p5 — Результатом оператора / является частное от деление первого операнда на второй; Результатом оператора % является остаток. В обеих операциях, если значение второго операнда равно нулю, поведение не определено.
C++03 5.6.4 — Бинарный оператор / возвращает частное, а бинарный оператор % возвращает остаток от деления первого выражения на второе. Если второй операнд / или % равен нулю, поведение не определено.
Если бы мы приняли приведенные выше абзацы за чистую монету, ответ, очевидно, Неопределенное поведение для обоих языков. Однако, если мы посмотрим дальше в стандарте C99, мы увидим следующий параграф, который кажется противоречивым(1):
C99 7.12p4 - Макрос INFINITY расширяется до постоянного выражения типа float, представляющего положительную или беззнаковую бесконечность, если таковая имеется;
Есть ли в стандартах какой-либо вид золотого правила, согласно которому неопределенное поведение не может быть заменено (потенциально) противоречивым утверждением? За исключением этого, я не думаю, что было бы неразумно заключить, что если ваша реализация определяет макрос INFINITY, то деление на ноль определяется как таковое. Однако если ваша реализация не определяет такой макрос, поведение будет неопределенным.
Мне интересно, каков консенсус (если таковой имеется) ) по этому вопросу для каждого из двух языков. Изменится ли ответ, если мы будем говорить о делении целых чисел int i = 1/0 и о делении с плавающей запятой float i = 1.0/0.0 ?
[b]Примечание (1)[/b] В стандарте C++03 говорится о библиотеке , которая включает макрос INFINITY.
Подробнее здесь: [url]https://stackoverflow.com/questions/3004095/division-by-zero-undefined-behavior-or-implementation-defined-in-c-and-or-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия