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

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

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

Ответить
SkyRanger
новенький
Сообщения: 10
Зарегистрирован: 13.07.2006 12:55:36
Откуда: Магадан
Контактная информация:

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

Сообщение SkyRanger »

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

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. Хотелось бы чтобы не было неприятных "сюрпризов"... И хотя все работает "и так", хочется чтобы все работало правильно...
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

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


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

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

Преобразование double->single всегда приводит к потере информации, ибо точность первого больше.
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

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

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

Просто при присваивании автоматическое преобразование, все должно быть правильно (если число умещается в single) :roll:
SkyRanger
новенький
Сообщения: 10
Зарегистрирован: 13.07.2006 12:55:36
Откуда: Магадан
Контактная информация:

Сообщение SkyRanger »

А если какой нить изврат передаст из скрипта число больше чем Single?
Ведь из скриптов увы только Double можно получить :(
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Будет либо денормализация (что-то вроде нуля), либо знаковая бесконечность, если в single NaN, то в double тоже будет NaN
Ответить