Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.004 c
15-1294323902
Rok
2011-01-06 17:25
2011.04.24
Выбор технологии кросс-платформенного приложения


2-1295522746
cyber-pilot
2011-01-20 14:25
2011.04.24
Вопрос про работу эксепшенов


15-1294650746
Palladin
2011-01-10 12:12
2011.04.24
Автоскролл при нажатии на колесо мыши


15-1294608594
Юрий
2011-01-10 00:29
2011.04.24
С днем рождения ! 10 января 2011 понедельник


15-1294219613
Palladin
2011-01-05 12:26
2011.04.24
ну сколько можно пить...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский