Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Паскаль и NaN

Ответить
Настройки темы
Теория - Паскаль и NaN

Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Здравствуйте!
Вобщем, нужно решить следующую задачу на Turbo Pascal'e v7.0:
Дано: переменная x типа single (var x: single;)
Что требуется: произвести некоторые действия в программе так, чтобы в конце своей работы она по команде writeln (x) выводила на экран именно надпись NaN (Not-a-Number).
Что нужно сделать с переменной X чтобы получить такой результат.
Делить на ноль естественно нельзя из-за ошибки Division by Zero.
Пробовал привести число к порядку 10^255 при неравной нулю мантисе числа - не получилось (все попытки приведения к порядку выше 10^30 заканчивались ошибкой).

Отправлено: 21:57, 16-01-2009

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


а так если:
Код: Выделить весь код
var x: single;
begin
  x := nan;
  writelen(x);
end;

Отправлено: 01:18, 17-01-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Вредитель


Сообщения: 460
Благодарности: 126

Профиль | Отправить PM | Цитировать


ManHack, в Delphi, NaN можно получить вот так
Код: Выделить весь код
(1.0/0.0)/(1.0/0.0)
попробуйте, может и в Паскале сработатет.

-------
Все сказаное является только моим личным мнением.


Отправлено: 10:15, 17-01-2009 | #3


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


А если самостоятельно сконструировать в памяти необходимое значение переменной?
Если верить переводу официального руководства:
Код: Выделить весь код
4-х байтовый (32-х битный) тип Single делится на три поля:
1 	8 	23
s 	e 	f
msb 	lsb 	msb 	lsb


Значение числа v определяется как,

если 0 < e < 255, то v = (-1)**s x 2**(e-127) x (1.f).
если e = 0 и f <> 0, то v = (-1)**s x 2**(-126) x (0.f).
если e = 0 и f = 0, то v = (-1)**s x 0
если e = 255 и f = 0, то v = (-1)**s x Inf.
если e = 255 и f <> 0, то v = NaN.

Отправлено: 12:21, 17-01-2009 | #4


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Вообще - добыть несколько нормальных справочников в электронном и поискать в них строку NaN. Она всплывёт в описаниях функций, будет указано в каких случаях получается такая ситуация. Преобразование строки в число по идее должно давать NaN. Извлечение корня из отрицательного числа.

Отправлено: 12:36, 17-01-2009 | #5


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Цитата:
если e = 255 и f <> 0, то v = NaN.
А как задать это самое single-число с полем e=255 ? у меня в этом поле больше 30 не помещается >.<

Код: Выделить весь код
(1.0/0.0)/(1.0/0.0)
Erorr 140: Invalid floating point operator.

Код: Выделить весь код
var x: single;
begin
  x := nan;
  writelen(x);
end;
Error 3: Unknown indefender


Отправлено: 18:43, 17-01-2009 | #6


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


ManHack, ну примерно вот так:
Код: Выделить весь код
var
  x: single;
  l: longint absolute x;

begin
 l:=2139095041;
 writeln (x);
end.
только, похоже, writeln не умеет возвращать NaN, т.к. получаем ошибку выполнения
207: Invalid floating point operation

Отправлено: 23:01, 17-01-2009 | #7


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Заранее известно, что задача выполнимая. На Паскале v7.0.
Неужели всё настолько сложно?

Отправлено: 19:54, 19-01-2009 | #8


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


ManHack, раз вам дают такие задачи, значит это разбиралось на лекциях или практиках - меньше надо было прогуливать.

Надеюсь, мы потом увидим правильное решение?

Отправлено: 13:40, 20-01-2009 | #9


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Эту задачу дали "кому мозг охота сломать". Я не прогуливал. Честно-честно

Отправлено: 15:57, 20-01-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Паскаль и NaN

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Паскаль, точнее его Turbo-версия ManHack Программирование и базы данных 5 09-12-2008 19:05
Разное - Бинарный поиск. (Паскаль) S1stem Программирование и базы данных 4 29-05-2008 21:52
И опять он, Паскаль!!!! Doktor Программирование и базы данных 2 23-06-2005 09:59
NaN via C++ pva Программирование и базы данных 6 19-07-2004 12:40
С++ и Паскаль Casper Программирование и базы данных 5 18-04-2003 19:35




 
Переход