Вопрос по константам с плавающей точкой (double).

 

Здравствуйте!


Допустим есть:

double X1;

double X2;


присвоим им:

double X1=MathPow( 13, 10) ;

double X2=137858491849;


теперь принтанем:

Print("X1= ",X1);

Print("X2= ",X2);


результат принта:

X1 =137858491849;
X2 =419538377;

Итак результат X1 получился верным по математическим вычислениям(взяв стандартный виндовский калькулятор), а вот результат X2 ошибочным(?).

Впрочем в этом-то и заключается вопрос.

Заранее благодарю за ответ.

 

Попробуйте следующую запись, возможно поможет:

double X2=137858491849.0;
 

Вариант у которого ответ в обоих случаях = 419538377

   int  X1=MathPow(13,10);
   int  X2 = 137858491849.0;
   Print(X1," ",X2);
 

И мне пожалуйста ответьте на вопрос. Что за чертовщина творится?


int start()
  {
//----
      MathSrand(GetTickCount());
      int f = MathRand()%100;
      double d = f/100;
      Alert (d);
//----
   return(0);
  }


Почему данный скрипт все время выдает 0?

 
lea >>:

Попробуйте следующую запись, возможно поможет:


  Ну это я уже обнаружил(недавно),но все равно спасибо, вот тока вопрос-то остается все еще в силе, почему?

 Может потому, что при вводе вручную присвоение дабловской константе происходит как целочисленная константа?  


StatBars >>:

Вариант у которого ответ в обоих случаях = 419538377


Ну тут присвоение идет как целочисленные, ответ конечно такой будет...
 
benik >>:

И мне пожалуйста ответьте на вопрос. Что за чертовщина творится?

Почему данный скрипт все время выдает 0?

"f" тоже должно быть дабл.

 
benik >>:

И мне пожалуйста ответьте на вопрос. Что за чертовщина творится?




Почему данный скрипт все время выдает 0?

сделай нормализацию!

т.е.

вот рабочий вариант:

 

MathSrand(GetTickCount());
int f = MathRand()%100;

double d = NormalizeDouble(f,0)/100;
Alert (d);

или без нормализации:

MathSrand(GetTickCount());
double f = MathRand()%100;

double d = f/100;
Alert (d);


 

 
спасиба :)
Точно. Забыл про приведение типов. Инт нельзя использовать в выражениях с дабл.
 
benik >>:
Инт нельзя использовать в выражениях с дабл.

можно. только его нужно неявно привести к "более старшему представлению"

int start()
  {
//----
      MathSrand(GetTickCount());
      int f = MathRand()%100;
      double d = f/100.0;
      Alert (d);
//----
   return(0);
  }
Причина обращения: