Как в CBuilder'е матем. ошибки игнорировать?
А попытка - исключение, не катит что ли?
using namespace std;
void function(int i)
{
double dRes = 1/i;
}
int main(int argc, char* argv[])
{
for(int i=10; i>-10; i--)
{
try
{
function(i);
}
catch (...)
{
}
}
return 0;
}
try
{
double a=StrToFloat(Edit1->Text);
double b=StrToFloat(Edit2->Text);
Label1->Caption=FloatToStr(a/b);
}
catch(...)
{
}
- вылетает, если b=0. Хотя, как ни странно - твой скомпилировал как консольное приложение - работает нормально. Никак не пойму, чё за херня?
а слабо руками проверять b на ноль и не делить?
Кстати, борладовский exe-шник у меня вылетает, микрософтовский - все нормально.
Слабо . Я вычислительную часть полгода назад писал - этот текстик я лишь для примера привёл. Там электрическое поле считается, и если считать на источнике (вспомни закон кулона) - то, конечно, получается деление на 0. При построении наглядной картинки, если выпадут несколько точек - это не существенно. Хотелось бы, не поднимая снова старых текстов (притом весьма больших ) выкрутиться.
зы
похоже, что Borland не относится к нормальному компилятору
это говорит старшекурсник (выпускник?) ВМК
Да, но программа 'а работает. Правда я её быдлеровским компилятором командной строки компилил - может он в среде разработки другой компилятор использует?
а чем еще помочь человеку у которого не работает try/catch?
Label1->Caption=FloatToStr(a/b);
заменить на
double c=a/b; - то тоже <<програм райсед ексептион дивиде бу зеро>>
Покаж текст.... Чем компилил?
ну я точно не знаю, чем помочь - у меня никаких эксепшенов, просто inf получается
#include <stdio.h>
int main(void)
{
double a, b;
for (a=1.0; a>(-1.0); a*=0.11) {
b = 1.0e12/a;
printf("a=%lg b=%lg\n", a, b);
}
return 0;
}
gcc-2.95 linux-i386
а ты уверен, что a через 0 проходит?
Для того там и поставлен printf
Е#учие рога! Хот ДЛЛ-ку пиши на VC...
При этой включенной опции, среда будет отлавливать все возникающие исключения, даже если они заключены в try-catch. Среда покажет тебе это сообщение, а после нажатия "Продолжить", продолжит выполнение проги в соответствии с логикой try-catch.
зы
есть большая разница между делением на 0 и делением на limits<double>::min_value...
Спасибо!
я пробовал и другой вариант
for (a=1.0; a>(-1.0); a*=0.11) {
if (a<1e-10) a=0.0;
b = 1.0e12/a;
printf("a=%lg b=%lg\n", a, b);
}
а не if (fabs(a)<1e-10) случайно?
Исключение "Деление на ноль" выскакивает только когда делишь целые числа.
а головой подумать?
а зачем тогда a>(-1.0)?
а вот это - чисто для прикола
Оставить комментарий
salko1
Скажем, мне нужно построить график, но если не повезёт - может особенность появится - деление на ноль. Кажися, он исключение выбрасывает. Как сделать, чтобы игнорировалось? Чтобы к следующим точкам переходить, а не вылетать из программы?Может кто пример кода привести?