IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Как преобразовать Integer в Real
сообщение
Сообщение #1


Гость






Код
Program LR10;
Uses CRT,graph;
Procedure GrOnScr;
Var
  y,x:real;
  expo:real;
  i,i2:integer;
  yscr:integer;
  dr,rm:integer;
Begin
   dr:=detect;
   InitGraph(dr,rm,'D:\TP7\BIN');
   MoveTo(0,240);
   LineTo(640,240);
   Moveto(320,0);
   LineTo(320,480);
   MoveTo(0,240);
   SetLineStyle(0,Solidln,1);
   yscr:=0;
   i:=1;
   Repeat
      [b]yscr:=Round((7*sqr(i)*(exp(-5*i)))*480/640+240);[/b]
         If i<=640 Then
            LineTo(i,yscr);
         PutPixel(Random(640),Random(480),Random(5));
         Delay(500);
         PutPixel(Random(640),Random(480),Random(5));
         i:=i+1;
   Until keypressed;
End;
Begin
   GrOnScr;
   ReadKey;
End.


В выделенной строке компилятор выдаёт ошибку floating point overflow. Что делать?
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






НО тут же подэкспоненциальное выражение максимум выходит -3200! О каком переполнении reala может идти речь? Может можно как-то заменить именно эту функуцию через логарифм например? Лично мне кажется, что тут всё же паскаль ругается из-за того, что i-переменная типа интеджер. Так как же её перевести в real?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата(Гость @ 23.12.2006 21:53) *

Лично мне кажется, что тут всё же паскаль ругается из-за того, что i-переменная типа интеджер. Так как же её перевести в real?

Угу. Именно так и есть, конечно.
Маленьких интеджеров (до 18) паскаль не боится, а потом пугается и решает в real не переводить - мало ли что.

А то, что вылетает на примерно 10^39, а граница диапазона real'а - 1.7*10^38 - совпадение!

Как ты думаешь, если процедура получает и возвращает результат типа real, внутри нее вычисления на каком типе ведутся?

Цитата
Попробуй поменять тип с Real на Double

Тип чего?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Xelix   Как преобразовать Integer в Real   24.12.2006 0:52
polic   какая из них выделенная?   24.12.2006 0:57
Xelix   yscr:=Round((7*sqr(i)*(exp(-5*i)))*480/640+240);   24.12.2006 1:01
мисс_граффити   дело не в переводе. у меня вылетает при i=18... пр…   24.12.2006 1:34
Xelix   Так как исправить положение? Когда отключаю коммен…   24.12.2006 1:40
мисс_граффити   у функции exp и аргумент, и возвращаемое значение …   24.12.2006 1:46
Гость   НО тут же подэкспоненциальное выражение максимум в…   24.12.2006 1:53
мисс_граффити   Лично мне кажется, что тут всё же паскаль ругаетс…   24.12.2006 2:15
volvo   Integer -> Real переводится автоматически, проб…   24.12.2006 1:55
Xelix   А если же в этой строке убрать минус перед 5, то о…   24.12.2006 2:16
volvo   Правда? А если подумать? И сделать вот так, наприм…   24.12.2006 2:18
Xelix   Хорошо, проблема ясна - мы легко переполняем тип. …   24.12.2006 2:34
мисс_граффити   а у меня опять 18 (TP 7.0) Гость, ты мои сообщен…   24.12.2006 3:05
volvo   У меня тоже TP70, только поддержка сопроцессора у …   24.12.2006 3:27
Xelix   Я ничьи сообщения не игнорирую, а наоборот, читаю …   24.12.2006 3:32
мисс_граффити   делфи тоже... Для y:=round(exp(-i)); (y: integer)…   24.12.2006 3:57
volvo   Не путай исчезающе малое число и очень большое... …   24.12.2006 4:40
мисс_граффити   это понятно. я о другом... про 44 написала просто …   24.12.2006 4:54


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.05.2024 22:48
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name