| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Значение выражения |
| Автор: Trotil 5.4.2010, 19:03 | ||
| Чему будет равна переменная r при x2 = 3, x1 = 1, y2 = 10, y1=5 ?
при типах double и int? Результаты: VS: double и int 'r' равно 50. gcc: int = 50, double = 29! gcc под MIPS: int = 35, double = 29. Вопрос: чему это выражение должно быть равно по стандарту? (могу расписать, как были получены компилятором эти результаты) |
| Автор: azesmcar 5.4.2010, 19:03 |
результат выражения стандартом не определен. Глава 5 - Expressions |
| Автор: Trotil 6.4.2010, 09:22 |
| Я думаю, что 29 есть нарушение (независимо от неопределенностей): ведь это 2*2 + 5*5, а по правилам скобки имеют наибольший приоритет, поэтому после действий в скобках t не должно меняться и выделенные жирным множители (t=x2-x1)*t + (t=y2-y1)*t должны быть одинаковыми. |
| Автор: azesmcar 6.4.2010, 09:26 | ||
| Trotil Заходим, читаем
единственная гарантия, которая дается это то, что программа будет скомпилирована. А Undefined Behavior это вообще кошмар...повезет, если компилятор не отформатирует компьютер |
| Автор: xvr 6.4.2010, 13:35 | ||
По правилам скобки определяют как компилятор будет понимать записанное выражение. Но они никак не влияют на то, в каком порядке компилятор будет это выражение вычислять. |