Русский

## Точность вычисления. Преобразование вещественного числа в целое.

К списку тем Авторизуйтесь или зарегистрируйтесь, чтобы создать новую тему
 112 peshihod 11.06.2011 14:47   ```//+------------------------------------------------------------------+ //|                                                         Test.mq4 | //+------------------------------------------------------------------+ double const=0.0001; double x; int a1,a2; //+------------------------------------------------------------------+ //| script program start function                                    | //+------------------------------------------------------------------+ int start()   {    int i;    string str; //----    for(i=45;i<64;i++)       {       a1=i;       x=a1*const;       a2=MathFloor(x/const);              if(a1==a2)str="; ok ";         else str="; !!!";              Print( "a1=a2 => ",a1 ,"=",a2 ,str , "  x=",DoubleToStr(x,8) );       } //----       return(0);   } //+------------------------------------------------------------------+ 14:18:08 Compiling 'Test' 14:18:08 Test GBPUSD,Daily: loaded successfully 14:18:08 Test GBPUSD,Daily: a1=a2 => 45=45; ok   x=0.00450000 14:18:08 Test GBPUSD,Daily: a1=a2 => 46=46; ok   x=0.00460000 14:18:08 Test GBPUSD,Daily: a1=a2 => 47=47; ok   x=0.00470000 14:18:08 Test GBPUSD,Daily: a1=a2 => 48=48; ok   x=0.00480000 14:18:08 Test GBPUSD,Daily: a1=a2 => 49=48; !!!  x=0.00490000 14:18:08 Test GBPUSD,Daily: a1=a2 => 50=50; ok   x=0.00500000 14:18:08 Test GBPUSD,Daily: a1=a2 => 51=51; ok   x=0.00510000 14:18:08 Test GBPUSD,Daily: a1=a2 => 52=52; ok   x=0.00520000 14:18:08 Test GBPUSD,Daily: a1=a2 => 53=53; ok   x=0.00530000 14:18:08 Test GBPUSD,Daily: a1=a2 => 54=54; ok   x=0.00540000 14:18:08 Test GBPUSD,Daily: a1=a2 => 55=55; ok   x=0.00550000 14:18:08 Test GBPUSD,Daily: a1=a2 => 56=56; ok   x=0.00560000 14:18:08 Test GBPUSD,Daily: a1=a2 => 57=57; ok   x=0.00570000 14:18:08 Test GBPUSD,Daily: a1=a2 => 58=58; ok   x=0.00580000 14:18:08 Test GBPUSD,Daily: a1=a2 => 59=58; !!!  x=0.00590000 14:18:08 Test GBPUSD,Daily: a1=a2 => 60=60; ok   x=0.00600000 14:18:08 Test GBPUSD,Daily: a1=a2 => 61=61; ok   x=0.00610000 14:18:08 Test GBPUSD,Daily: a1=a2 => 62=62; ok   x=0.00620000 14:18:08 Test GBPUSD,Daily: a1=a2 => 63=63; ok   x=0.00630000 14:18:08 Test GBPUSD,Daily: uninit reason 0 14:18:08 Test GBPUSD,Daily: removed ``` ` ` Глюк какой то. Как быть? Целое число умножается на константу "const", затем обратно делится на эту же константу, однако результат не всегда оказывается равным предыдущему числу. При 49 и 59, получается 48 и 58 соответственно. Непонятно почему 0.00590000 разделить на 0.0001 получается 58 ? похожие
 Модератор8389 sergeev 11.06.2011 17:19 #
 409 MoneyJinn 11.06.2011 18:19 #   Вероятно, это особенность MathFloor() https://forum.mql4.com/ru/36277
 112 peshihod 11.06.2011 18:21 #   sergeev: потомучто Понятно.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий