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?
Problem z przekraczaniem zakresu double w C/C++
-
- 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++
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
Można też od razu obliczyć graniczne wartości parametrów, znając zakres typu double: MAX_DOUBLE = 2^1023 = ~10^308
-
- 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++
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
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
-
- 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++
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.
Control word koprocesora ustawiamy asemblerem lub setcw87 (coś w tym stylu).
Raczej nie jest to zbyt proste rozwiązanie = niewielkie szanse powodzenia.