Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
1

Почему команда Write не любит тип Extended ?

10.01.2013, 23:36. Показов 974. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые!
Нужна подсказка.
При работе программы получаются слишком большие значения. Наверное больше 10^300. Пришлось поменять тип Real на Extended.
Но теперь при выдача значения на экран Write(); - программа вылетает. Пробовал сначала сохранить в переменную Real, а потом выдать. Вылетает при присваивании.
Подскажите, как поступить. Есть функции преобразования Real в Extended ? Пусть даже с потерей данных.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2013, 23:36
Ответы с готовыми решениями:

Почему MS-DOS не любит кириллицу ? (Или почему она не любит меня ?)
Здравствуйте Почему MS-DOS не любит кириллицу ? У меня есть несколько консольных проектор...

Тип Extended
const k= ? Наибольшее k, если Код Pascal var m:array of extended;

Тип Extended. Как добиться максимальной точности?
Как добиться максимальной точности в Extended? В частности, чтобы ноль было равно 0, а не...

Команда консоли выдает ошибку - "Unable to load Screen Saver extended data. Aborting."
В папке C:\Windows\System32\ лежит файл скринсейвера Ribbons.scr Если через консоль ввести...

14
angstrom
10.01.2013, 23:40 2
Через fld, fstp не пробовал?
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
10.01.2013, 23:42  [ТС] 3
angstrom: Первый раз слышу. Что за ... такая?
0
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
10.01.2013, 23:47 4
Asm
Для загрузки дробных чисел пользуемся командой fld
fstp fld
1
angstrom
10.01.2013, 23:48 5
В принципе, Дельфи при таком присвоении сам вызывает эти команды, но можно попробовать и вручную
Assembler
1
2
3
4
asm
  fld myExtended
  fstp myReal
end;
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
10.01.2013, 23:51 6
если применить Format при выводе получится тоже самое?
1
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
10.01.2013, 23:52 7
Хм... А какая версия Delphi и какое конкретно число?
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
10.01.2013, 23:56  [ТС] 8
D7. Число: 3,6*10^-1145. Сделал так:
Delphi
1
2
3
4
5
6
7
8
9
10
Var
  ReE : Extended;
  Re : Real;
 
  ReE:=xx[nn,6];
asm
  fld ReE
  fstp Re
end;
write(Re);
В Re - в результате получилось 0, но при выдаче всё равно, чего-то вылетает. Что за фигня?
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
10.01.2013, 23:57 9
Цитата Сообщение от Одиночка Посмотреть сообщение
как поступить
Запереть фрагмент кода, приводящий к "вылетанию", в блок try..exept, поймать исключение и исследовать его - тип, сообщение об ошибке.
1
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
11.01.2013, 00:06 10
Одиночка, здесь что-то не то. Тип Extended - это "родной" тип в Delphi. Если даже в программе применяются какие-то другие вещественные типы, то при вычислении выражений операнды сначала приводятся к типу Extended, затем происходит вычисление. Результат вычислений первоначально тоже принадлежит к типу Extended и потом он приводится к тому типу, которому принадлежит выражение.

Добавлено через 4 минуты
Сейчас выполнил такой код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
var
  A : Extended;
begin
  A := 3.6E-1145;
  Writeln(A);
  Readln;
end.
Всё без ошибок отработало.
1
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
11.01.2013, 00:07  [ТС] 11
Mawrat: Вроде всё так. Но вот почему-то так получается. А если разрядность порядка результата не влазит в Real тип?
Мне непонятно, почему теперь уже после получения значения в Real - всё равно происходит вылет.
Format - не помог.
Try Except - проходит. Только я не знаю как получить сообщение в Except. Чтобы не искать - подскажите и это заодно.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
11.01.2013, 00:15 12
Если просто присвоить 3.6e-1145, всё хорошо. Напиши число, на котором вылетает, побайтово.
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
11.01.2013, 00:17 13
Цитата Сообщение от Одиночка Посмотреть сообщение
А если разрядность порядка результата не влазит в Real тип?
По модулю диапазон допустимых значений для Extended: 3.6 x 10^-4951 .. 1.1 x 10^4932.
---
try - except:
Delphi
1
2
3
4
5
6
7
8
try
  ...
except
  on e : Exception do begin
    Writeln('Ошибка: ', e.Message);
    Writeln('...');
  end;
end;
1
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
11.01.2013, 00:36  [ТС] 14
Я там перед этим увидел некорректный код. Только не понимаю, как могло так зацепить, что вылетало уже по коду дальше.
Короче текстовый файл читался, как File Of Real. Причем без конроля конца файла. Может даже не все элемента массива заполнялись. Сейчас с этим куском разберусь. Может всё станет на свои места.
Большое всем спасибо.

Добавлено через 12 минут
Точно. Сделал корректное чтение файла - и перестало вылетать даже без приведения типов.
Так что Write здесь ни при чём.
Но, выходило же на следующую команду после цикла чтения, а по F8 - вылетало без всякого сообщения. Во как бывает.
Ещё раз всем, большое спасибо.
1
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
11.01.2013, 00:48 15
Цитата Сообщение от Одиночка Посмотреть сообщение
вылетало без всякого сообщения
Потому что в "шаблонном" консольном приложении отсутствует глобальный перехват и обработка исключений.
К тому же в настройках дебагера наверняка отключена опция "Stop on Delphi Exceptions", а также не настроены нужным образом опции обработки "OS Exceptions".
2
11.01.2013, 00:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2013, 00:48
Помогаю со студенческими работами здесь

Почему не любит Яндекс
Никакой раскруткой и оптимизацией не занимался, но вот в чём вопрос: по запросу краткое содержание...

как сделать так чтоб команда write выводила русские символы а не каракули??
как сделать так чтоб команда write выводила русские символы а не каракули?? кода прога готова и...

Почему кондиционер не любит солнце?
Мне тут на днях мастера сказали, когда ставили внутренний блок дома у матери, что кондиционеры не...

Почему Гугл не любит сайт?
Здравствуйте! Прошу совета общественности... Гоша не индексирует сайт. Сайту несколько лет,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru