Problem z przekraczaniem zakresu double w C/C++

Wiader
Użytkownik
Użytkownik
Posty: 82
Rejestracja: 13 lip 2004, o 10:31
Lokalizacja: Zielona Góra
Podziękował: 3 razy

Problem z przekraczaniem zakresu double w C/C++

Post autor: Wiader »

Dajmy na to, ze mam policzyc taka f-cje: funkcja1=((*a)*(pow((x),(*b)+1)))/((*b)+1)

*a i *b to wartosci wspolczynnikow podawanych przez usera (sa podawane w innej f-cji stad te wskazniki) x rowniez jest podawane przez usera...

problem jest w tym, ze potrzebuje napsiac cos w stylu

do
{
funkcja1=((*a)*(pow((x),(*b)+1)))/((*b)+1);
}
while(funkcja1!=OVERFLOW);

jest mozliwe napisanie czegos takiego?? zamiast badania kazdego wyrazenia z osobna a potem razem czy nie jest bliski przekroczeniu zakresu doubla?
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

Problem z przekraczaniem zakresu double w C/C++

Post autor: Fibik »

Definiujesz funkcję matherr lub/i jakaś kombinacja: try catch.
Można też od razu obliczyć graniczne wartości parametrów, znając zakres typu double: MAX_DOUBLE = 2^1023 = ~10^308
Wiader
Użytkownik
Użytkownik
Posty: 82
Rejestracja: 13 lip 2004, o 10:31
Lokalizacja: Zielona Góra
Podziękował: 3 razy

Problem z przekraczaniem zakresu double w C/C++

Post autor: Wiader »

Nie idzie tego zrobic jakos tak prosciej? zeby badac czy wyrazenie jest +inf lub -inf?
Mam w programie strasznie duzo funkcji wpisanych z wieloma parametrami i potrzebuje poprostu napisac cos takiego zeby program sie nie wysypywal gdy przekroczy wartosc double lecz poprosil o ponowne podanie parametrow... czyli musi wykrywac +inf i -inf? jesli sie da...

da sie?

pozdro i z gory dzieki
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

Problem z przekraczaniem zakresu double w C/C++

Post autor: Fibik »

Trzeba wyłączyć kontrolę błędów koprocesora (generowanie przerwań...), wtedy możesz sprawdzać +-inf, jest jeszcze tzw. nie liczba, np. sqrt(-1) i inne takie tam.
Control word koprocesora ustawiamy asemblerem lub setcw87 (coś w tym stylu).

Raczej nie jest to zbyt proste rozwiązanie = niewielkie szanse powodzenia.
ODPOWIEDZ