Вещественные числа.
От: flexcreator  
Дата: 05.12.05 08:43
Оценка:
ХЕЛП!!!

Допустим у меня есть функция

void routine( ROUTINE_ID in_routine_id, ...)
{
   BEGIN_ARG_SELECTION();
      ARG( int, some_int );
      ARG( float, some_float );
      ARG( char, some_char );
      
      cout<<"some_int: "<<some_int<< " some_float: "<<some_float<<" some_char:"<<some_char<<endl;

     //Отсылаем полученные параметры некоторой функции...
     some_func( some_int, some_float, some_char );

   END_ARG_SELECTION();
}



Проблема возникает, когда я передаю ей float
(т.е. второй параметр)

  //...

  routine( SOME_ID, 999, 555.0f, 251 )

  //...

..int выводится нормально, а вместо float и char — какая-то белиберда.

Но, если преобразовывать float в DWORD и обратно, то все работает:

inline float to_float( DWORD in_dword )
{return (*(float*)&in_dword);}

inline DWORD to_dword( float in_float )
{return (*(DWORD*)&in_float);}


//....

void routine( ROUTINE_ID in_routine_id, ...)
{
   BEGIN_ARG_SELECTION();
      ARG( int, some_int );
      ARG( DWORD, some_float );
      ARG( char, some_char );
      
      cout<<"some_int: "<<some_int<< " some_float: "<<some_float<<to_float( some_float )<<" some_char:"<<some_char<<endl;

     //Отсылаем полученные параметры некоторой функции...
     some_func( some_int, to_float( some_float ), some_char );

   END_ARG_SELECTION();
}

//....
   
   routine( SOME_ID, 999, to_dword( 555.0f ), 251 );


Вопрос:ПОЧЕМУ???
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.