Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Проблемы с плавающей запятой   Найти похожие ветки 

 
Bolg   (2012-07-19 16:42) [0]

Вопрос такой: почему эта строчка в моем проекте выдает 0 а в пустой программе больше 0?
floattostr(incsecond(now)-now)


 
Германн ©   (2012-07-19 17:04) [1]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


 
Bolg   (2012-07-19 17:19) [2]

Спасибо, так работает
Set8087CW(Get8087CW or $0100);
floattostr(incsecond(now)-now);

есть какие-то подводные камни?


 
Inovet ©   (2012-07-19 17:53) [3]

> [2] Bolg   (19.07.12 17:19)
> есть какие-то подводные камни?

Конечно, потом будет в другом месте не так, как ожидается работать.


 
Dimka Maslov ©   (2012-07-19 18:09) [4]


> есть какие-то подводные камни?


контрольное слово сопроцессора глобально для всех процессов в системе. Его надо приводить к нужному виду каждый раз перед началом вычислений. Иначе любой другой процесс может невозбранно его поменять в свои сугубо личных интересах.


 
Bolg   (2012-07-19 18:53) [5]

Я так понял именно DirectX ставит меньшую точность и не возвращает ее назад


 
Anatoly Podgoretsky ©   (2012-07-19 19:01) [6]


> есть какие-то подводные камни?
> floattostr(incsecond(now)-now);

Конечно ведь тут вызов два раза не реентерабельной фукции, результат непредсказуемый, зависит от погоды на Марсе


 
Bolg   (2012-07-19 19:47) [7]

Ну это был пример, а сам рабочий код выглядит так:
time.Now:=time.Now+time.Speed*timegap;
Где time.Speed принимает значения
EncodeTime(0,0,1,0)
EncodeTime(0,1,0,0)
EncodeTime(1,0,0,0)
EncodeTime(23,59,59,999)

Работает норм


 
Германн ©   (2012-07-20 02:23) [8]


> Bolg   (19.07.12 19:47) [7]
>
> Ну это был пример, а сам рабочий код выглядит так:
> 1
>  
> time.Now:=time.Now+time.Speed*timegap;
>
> Где time.Speed принимает значения
> 1
> 2
> 3
> 4
>  
> EncodeTime(0,0,1,0)
> EncodeTime(0,1,0,0)
> EncodeTime(1,0,0,0)
> EncodeTime(23,59,59,999)
>
> Работает норм
>

А в чём тогда проблема?


 
AV ©   (2012-07-20 09:49) [9]

есть

var
 R: Double;
begin
 repeat
   R := now-now;
   if R <> 0 then
     mmo1.Lines.Add(FloatToStr(R));
 until mmo1.Lines.Count > 10;

-1,85187673196197E-7
-1,85187673196197E-7
-1,85187673196197E-7
-1,85180397238582E-7
-1,73611624632031E-7
-1,73611624632031E-7
-1,85187673196197E-7
-1,85187673196197E-7
-1,73611624632031E-7
-1,85187673196197E-7


 
Inovet ©   (2012-07-20 12:15) [10]

> [9] AV ©   (20.07.12 09:49)

Так и год может быть.


 
Anatoly Podgoretsky ©   (2012-07-20 12:43) [11]

Не может быть


 
AV ©   (2012-07-20 13:00) [12]


> Inovet ©   (20.07.12 12:15) [10]

день уже
> Не может быть

имхо.


 
Inovet ©   (2012-07-20 14:15) [13]

> [11] Anatoly Podgoretsky ©   (20.07.12 12:43)
> Не может быть

Это почему не может?


 
Anatoly Podgoretsky ©   (2012-07-20 14:22) [14]

Потому что он убивается формулой now-now


 
Inovet ©   (2012-07-20 14:32) [15]

> [14] Anatoly Podgoretsky ©   (20.07.12 14:22)
> Потому что он убивается формулой now-now

А если между вызовами Now() сделать процессу Suspend на год? Ну так вот иногда попадёт.


 
Anatoly Podgoretsky ©   (2012-07-20 14:44) [16]

> Inovet  (20.07.2012 14:32:15)  [15]

Кто к нас с Suspend придет, тот от него и погибнет


 
AV ©   (2012-07-20 14:44) [17]


> Inovet ©   (20.07.12 14:32) [15]


:)

function CalcAddYear (NumY: integer);
begin
  Sleep(NumY*365*24*60*60);
  Result := now;
end;


 
Омлет ©   (2012-07-20 15:25) [18]

Я уже как-то сетовал: http://delphimaster.net/view/15-1305794033



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.064 c
15-1343414133
KilkennyCat
2012-07-27 22:35
2013.03.22
Чем бы учитывать свои радиодетальки?


8-1226526316
Agent[007]
2008-11-13 00:45
2013.03.22
разрешение


15-1346838937
GanibalLector
2012-09-05 13:55
2013.03.22
Tagged PDF


15-1349873116
RTF
2012-10-10 16:45
2013.03.22
Сжать график.


2-1346134856
noob_one
2012-08-28 10:20
2013.03.22
Терминал сбора данных