Witam :)
Mam do zrobienia programik, który będzie liczył podane wyrażenia dla danego x.
Moje pytanie jest takie- jak zabezpieczyć się przed wyjściem poza zakres- jak widać suma jest dla nieskończonej liczby elementów oraz jaki typ danych będzie w tym zadaniu najbardziej optymalny? Wydaje mi się, że z uwagi na dzielenie i osiągane dość wysokie liczby najlepszy będzie double, ale wolę się upewnić. A najważniejsze jest dla mnie jak nie wyjść poza zakres.
Z góry dziękuje za odpowiedź i pozdrawiam!
- Co Ty nazywasz wyjściem poza zakres?
- Nieskończonej sumy nie wyliczysz, musisz wybrać jakieś kryterium przerwania sumowania.
Zawsze wybieraj narzedzie stosownie do zadania, jakie masz wykonac.
Dla powyzszego zadania - idealne narzedzie to np program Maple, nie java
Chodzi mi to, aby przerwać sumowanie w momencie, gdy skończy nam się zakres- czyli gdy kolejne sumowanie spodowałoby osiągnięcie wyższej wartości (niekoniecznie wyniku- wystarczy, że którejś skladowej np. silni z k) niż maksymalna dla danego typu liczbowego- np. int.
Zadanie muszę zrobić w javie, bo z niej korzystamy na zajęciach.
Wykonaj ten program, popatrz na ekran i będziesz wiedział jakie jest największe dopuszczalne k.
public class Silnia
{
public static void main(String[] args)
{
{
int silnia=1;
for(int i=2;i<30;i++)
{
silnia*=i;
System.out.println("i= "+i+" silnia= "+silnia);
}
}
{
long silnia=1;
for(int i=2;i<30;i++)
{
silnia*=i;
System.out.println("i= "+i+" silnia= "+silnia);
}
}
}
}
Dzięki za odpowiedź. a czy jest jakaś funkcja, która zwraca maksymalną wartość dla danego typu liczbowego? W pascalu to było np. high(int), a w javie nie mogę czegoś takiego znaleźć.
Integer.MAX_VALUE i odpowiednio dla innych
A jak chcesz wykorzystać Integer.MAX_VALUE do sprawdzenia czy nie przekroczyłeś zakresu?
Zwyczajnie- sprawdzić, czy wynik jest większy, niż maksymalna wartość minus kolejny element, który chcę dodać do wyniku. Aczkolwiek w tym zadaniu raczej z tego nie skorzystam, gdyż nie będę wyliczać każdego elementu z osobna. Po prostu myślę, że może mi się to przydać w przyszlości:).