Проблемы размеров типов данных

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблемы размеров типов данных

Сообщение SkyRanger » 17.04.2007 03:40:29

В лазарусе получаю от компилятора сообщения:

Warning: Type size mismatch, possible loss of data / range check error

Код: Выделить всё
{$WARNINGS OFF}
  FRGB.R := random(255);
  FRGB.G := random(255);
  FRGB.B := random(255);
{$WARNINGS ON}


Ну тут компилятор правильно возмущается, но так как я "укладываюсь" в границы типа все ок.

Код: Выделить всё
procedure PrintString(x, y, z: GLfloat; Str: PChar; FontName:
string; AColor:TGLColor);


FontsManager.PrintString(FControlRec.Left + FParentWRec.Left +
FControlRec.Width / 2 - Length(FControlRec.Caption) * 16 / 2,
FParentWRec.Top - FControlRec.Top - FControlRec.Height / 2 - 8, 0,
FControlRec.Caption, 'font5', AColor);

GLfloat = Single;



Вот тут я не пойму причин его возмущения :(
Все переменные типа GLfloat...

Код: Выделить всё
var
  bytes: Word;
  argnum: Word;
  i: Integer;
  P, Q: PByte;
begin
  bytes := argnum * 4;

  P^ := 8 + 4 * i;

  P^ := 4 + bytes;


Это кусок SDL модуля и тут он тоже ругается на разницу типов.

Вообще раньше я как то не обращал внимание, хотя на самом деле проблема есть и теоретически может привести к неслабым глюкам там где их не ждешь... :(

И еще один вопрос. Как правильно перевести Double в Single. У меня скрипты питона возвращают числа только в виде Double, в то время как функции OpenGL работают с числами Single. Хотелось бы чтобы не было неприятных "сюрпризов"... И хотя все работает "и так", хочется чтобы все работало правильно...
SkyRanger
новенький
 
Сообщения: 10
Зарегистрирован: 13.07.2006 12:55:36
Откуда: Магадан

Сообщение Mirage » 17.04.2007 08:04:54

var
bytes: Word;
argnum: Word;
begin
bytes := argnum * 4;


Тут понятно - word*4 может уже не помещаться в word.
Тоже наверное и с single/double.

Если особо больших чисел не предвидится, которые не влезут в single, то беспокоиться не о чем.

Преобразование double->single всегда приводит к потере информации, ибо точность первого больше.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Сообщение shade » 17.04.2007 10:54:34

Тут может проблема не float/double а со строками?
компилятор ругается на преобразование ShortString -> pchar

SkyRanger писал(а):И еще один вопрос. Как правильно перевести Double в Single.

Просто при присваивании автоматическое преобразование, все должно быть правильно (если число умещается в single) :roll:
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение SkyRanger » 17.04.2007 15:47:01

А если какой нить изврат передаст из скрипта число больше чем Single?
Ведь из скриптов увы только Double можно получить :(
SkyRanger
новенький
 
Сообщения: 10
Зарегистрирован: 13.07.2006 12:55:36
Откуда: Магадан

Сообщение shade » 17.04.2007 18:34:57

Будет либо денормализация (что-то вроде нуля), либо знаковая бесконечность, если в single NaN, то в double тоже будет NaN
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 248

Рейтинг@Mail.ru