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

Вниз

Принтер "портит" выполнение программы?   Найти похожие ветки 

 
han_malign   (2010-12-23 12:35) [40]


> Не всё так просто

- с currency - просто(ε=0.0001)

>> А деление проверяется на зеро заранее.
> ты не погорячился?

- подразумевался пост 12 © (23.12.10 10:20) [30], и тут надо исходить из вероятности возникновения ситуации...
Если это исключительная, крайне редкая ситуация - то лишнее ветвление(не убирающее необходимости защищенной секции) - избыточно.
Но учитывая:
> {Здесь некотовый код, определены значения переменных rlBase,  rlMulti, rlBaseDM, rlMultiDM. Кстати, значение  rlBaseDM,  rlMultiDM порой бывают равны нулю}
- ситуация вполне нормальная, и ветвление обосновано, т.к. нормальные входные данные не должны порождать исключение(которое дает значительное пенальти производительности)...


 
Abcdef123   (2010-12-24 05:54) [41]

To [40]: Красиво написано, но не поняла, вы за использование использование проверки на нуль или за использование except?


 
Ega23 ©   (2010-12-24 06:20) [42]


>  вы за использование использование проверки на нуль или
> за использование except?


Дурная постановка вопроса.


 
Abcdef123   (2011-01-18 08:50) [43]

Здравствуйте, Мастера.
Докладываю - наконец-то у клиента всё протестировали, но, ничего не помогло. Проблема существует.
А вот, что произошло на моем компе! Как я писала, что у меня на компе программа работает нормально.
Но, как только я протестировала идею [19], у меня вылетает такая же ошибка! Хотя предложение использовать asm FINIT end; должно бы наоборот - помочь!
Я прошла пошагово, и нашла, что когда
в функции идет деление на ноль, то программа не идет на except, а присваивает результату вот такое больше разрядное значение.
Если я добавлю перед применением формулы проверку на ноль, то ошибки нет.
В общем, чтобы уж точно было понятно привожу описываемые варинты: работаютщие:
function CalcProportionAsAmount(rlTotal, rlSubTotal, rlAmount : Currency) : Currency;
begin
try
 result:= rlAmount * (rlSubTotal / rlTotal);
except
 result:= 0;
end;
end

function CalcProportionAsAmount(rlTotal, rlSubTotal, rlAmount : Currency) : Currency;
begin
 asm FINIT end;
try
 if rlTotal <> 0 then  
   result:= rlAmount * (rlSubTotal / rlTotal)
 else
   result:= 0;
except
 result:= 0;
end;
end
А ЭТО НЕРАБОТАЮЩИЙ:
function CalcProportionAsAmount(rlTotal, rlSubTotal, rlAmount : Currency) : Currency;
begin
 asm FINIT end;
try
 result:= rlAmount * (rlSubTotal / rlTotal);
except
 result:= 0;
end;
end

На моем компе я проверяю с моим принтером. То есть всё также  много вопросов - всё те же.
Прошу прокомментировать.


 
12 ©   (2011-01-18 09:48) [44]


> когда
> в функции идет деление на ноль, то программа не идет на
> except, а присваивает результату вот такое больше разрядное
> значение.

Вероятно, там не 0, а несколько больше(меньше).

function CalcProportionAsAmount(rlTotal, rlSubTotal, rlAmount : Currency) : Currency;
const
 Eps = 0.0001;
begin
try
if (rlTotal >  Eps) then  
  result:= rlAmount * (rlSubTotal / rlTotal)
else
  result:= 0;
except
result:= 0;
end;

end;

Григорьев Антон, "Невероятные особенности вещественных чисел" , как-то так, гуглите, короче


 
Amoeba_   (2011-01-18 11:47) [45]


> Григорьев Антон, "Невероятные особенности вещественных чисел"
> , как-то так, гуглите, короче

Неочевидные особенности вещественных чисел
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


 
12 ©   (2011-01-18 15:51) [46]

да-да


var
 R:Single;
begin
 R:=0.1;
 if R=0.1 then
  Label1.Caption:="Равно" else
  Label1.Caption:="Не равно"
end;
При нажатии кнопки мы увидим надпись «Не равно». На первый взгляд это кажется абсурдом.
(с) Антон Григорьев


из этой же серии, имхо


 
12 ©   (2011-01-18 16:21) [47]

еще раз тему перечитал - тогда так: Компьютер портит.
Без компьютера же программа не лажает?!
Вот.. :)
А чтоб программа не лажала - ее надо отлаживать (с)



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

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

Наверх




Память: 0.55 MB
Время: 0.011 c
15-1294771007
LDV
2011-01-11 21:36
2011.04.24
sql-запрос


2-1295289241
student22
2011-01-17 21:34
2011.04.24
запуск скрипта/Apache


15-1294645762
12
2011-01-10 10:49
2011.04.24
Еще раз о тервере


2-1295504959
Novi4ok1992
2011-01-20 09:29
2011.04.24
Выбор языка интерфейса в программе


15-1294754988
12
2011-01-11 17:09
2011.04.24
На панели задач хочу название кнопки Delphi7 + Имя_проекта.