![]() |
|
Модераторы: bsa |
![]()
|
|
| bullvinkle |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 18.3.2008 Репутация: нет Всего: нет |
Написал простенькую (первую за всю жизнь на С++) лабу, она считает заданное выражение дважды: используя два типа переменных float и double. Обязательным условием было использовать дополнительные переменные: сколько действий - столько и переменных.
Результаты отличаются друг от друга и препод требует это объяснить. Объяснения типа ".....а там округляется." преп не принимает. Говорит объяснить ему что такое математический ноль, как происходит сложение чисел и как это все относится к моей лабе. И обязательно таким языком, что бы меня понял каждый школьник. Кто понимает как это сделать, объясните мне пожалуйста.
Результат: If you use float the answer is: -1.28 The answer with double is: -1 Это сообщение отредактировал(а) bullvinkle - 5.10.2008, 17:55 |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
может - 1.28 вот так код нагляднее будет
а эффект из за разной точности double и float. http://ru.wikipedia.org/wiki/%D0%9E%D1%82%...%BE%D0%BB%D1%8C Это сообщение отредактировал(а) mes - 5.10.2008, 17:59 |
||||
|
|||||
| bullvinkle |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 18.3.2008 Репутация: нет Всего: нет |
Mes ошибку в результате исправил, спасибо.
Да, твой код по точнее и по компактнее будет, но от меня пока этого не требуется. О том что точность разная я говорил, но поскольку препод в прошлом семестре преподавал нам архитектуру ЭВМ ему такого ответа мало. Вот если бы мне кто то объяснил про математический ноль (определение с википедии я знаю, но этого мало) и как вобще он относится к моей лабе. Кстати если не использовать промежуточных переменных, то результаты в обеих случаях одинаковые. Какой из этого можно сделать вывод? |
|||
|
||||
| korian |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 2 Всего: 17 |
вывод тут один: промежуточные вычисления производятся в double и нормальные компиляторы на строки:
выдают предупреждение: warning C4244: '=' : conversion from 'double' to 'float', possible loss of data Числа с плавающей запятой float предоставляет точность максимум до 7 знаков. для вычисления операции: i=pow(h,3); без потерь, необходима большая точность, здесь и происходят основные потери. |
||||
|
|||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |