Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > умножение переменной на число в Pascal


Автор: Plavozont 6.12.2010, 14:43
В программе возникает ошибка:

Код

var
i, k:integer;
r:real;
begin

r:=10000*10; {всё ок}
k:=10000;
r:=k*10;{Runtime error 215}

end.


Никто не знает почему, и как это решить ?

Автор: SPrograMMer 6.12.2010, 15:40
тип integer паскаля 2 байтный, и хранит числа из диапазона -32768 до +32767.
У вас получается число более чем 32767.
Попробуйте тип Int64, например smile

Добавлено через 4 минуты
хотя, результат присваивается переменной типа real, но видимо все же компилятор пытается получить значение "в формате" integer.

Можно еще попробовать вместо real использовать типы побольше: Double или Extended

Автор: remax 6.12.2010, 16:08
Код

r:=10.0*k;


и оставить типы данных как были....

Автор: Plavozont 6.12.2010, 16:39
Спасибо ! Longint помог ! Всё же не понятно чем 6 и 8 строка отличаются.

Автор: CROTishka 6.12.2010, 17:40
отличается тем, что компилятор оптимизирует 10000*10 в константу.

Автор: cat512 7.12.2010, 00:31
Цитата

В программе возникает ошибка:

какая среда используется - free pascal?
Специально проверил под 6 update pack 2, Всё отлично работает как с оптимизацией так и без оной.

Автор: northener 7.12.2010, 02:35
Цитата(cat512 @  7.12.2010,  00:31 Найти цитируемый пост)
какая среда используется - free pascal?

Скорее TurboPascal. 
Тип "результата выражения", т.е. вычисления его правой части компилятор берет от первой слева переменной в правой части. А она Integer.
В 6-й строке есть только  константы. В ней тип выражения компилятор берёт из левой части выражения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)