|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.08.2009, 14:57 | #1 |
Форумчанин
Регистрация: 16.04.2009
Сообщений: 247
|
Неожиданный результат
Может кто-нибудь прокомментировать столь странный(как вы увидите) вывод программы?
Код:
|
16.08.2009, 15:19 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
используй extended
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
16.08.2009, 15:35 | #3 |
Форумчанин
Регистрация: 16.04.2009
Сообщений: 247
|
До этого я мог и сам додуматься. Мне интересно, почему именно приведенный выше код выдает именно такой результат. Понятно, что само выражение 1.7e308 имеет тип extended, неясно почему результат выражения 1.7e308 - v такой, как было показано выше. Разве тип всего выражения не приводится к "наибольшему" типу? Или, если в выражении константа и переменная, тип всего выражения приводится к типу переменной, в данном случае к типу double? Но ведь 0, он и в extended'е и в double 0... А максимальное значение double, если верить мануалу - это как раз 1.7e308.
Последний раз редактировалось megachuhancer; 16.08.2009 в 15:38. |
16.08.2009, 15:49 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
как я понял типы extended и double не очень совместимы
(8байт и 10байт...мне кажется причина кроется тут) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
16.08.2009, 15:54 | #5 |
Форумчанин
Регистрация: 16.04.2009
Сообщений: 247
|
То есть их нельзя использовать в одном выражении?
Код:
Да и непонятно вот что: выражение 1.7e308 - v имеет вполне определенный тип. Поэтому даже если 0 в extended - это 6.11e291 в double , writeln выводит значение вполне определенного типа. |
16.08.2009, 16:08 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Код:
так тоже не то выходит: Код:
Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
16.08.2009, 16:13 | #7 |
Форумчанин
Регистрация: 16.04.2009
Сообщений: 247
|
Даааа.... Присвоить можно, typecast нельзя сделать...
|
16.08.2009, 16:21 | #8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
поэтому придется переводить через присваивание
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
17.08.2009, 00:08 | #9 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
В первом случае преобразование выполняет компилятор, во втором - FPU.
Компилятор получает 73 B2 DB B9 83 89 16 F2 FE 43. FPU получает 00 B0 DB B9 83 89 16 F2 FE 43. Оба они выводятся как 1.7e308, но разность их примерно 6.11E+0291. Возникает это, похоже, из-за глюка компилятора в преобразовании. А вот почему разность такая... Это надо разбираться с представлением вещественных чисел. Последний раз редактировалось Somebody; 17.08.2009 в 00:10. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
результат запроса | Ko$tello | БД в Delphi | 7 | 18.04.2012 12:13 |
Не тот результат! | Dawystrik | Общие вопросы Delphi | 3 | 22.03.2009 09:50 |
неожиданный вопрос :) | Exo | Microsoft Office Excel | 10 | 04.05.2008 11:06 |
Результат прогресса | Stilet | Свободное общение | 10 | 15.04.2008 13:03 |
Turbo C:не видно результат. | Trewert | Помощь студентам | 5 | 07.09.2007 00:10 |