Главная страница
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.051 c
15-1348259402
Юрий
2012-09-22 00:30
2013.03.22
С днем рождения ! 22 сентября 2012 суббота


15-1350393941
картман
2012-10-16 17:25
2013.03.22
что делать?


15-1351516785
Scott Storch
2012-10-29 17:19
2013.03.22
кодировки для не неюникодных программ


1-1301494021
Циркуль
2011-03-30 18:07
2013.03.22
Модальное окно прячется под немодальным


15-1343421003
Юрий
2012-07-28 00:30
2013.03.22
С днем рождения ! 28 июля 2012 суббота