Crash przy potęgowaniu zbyt dużej liczby

0

Kiedy spróbuję spotęgować zbyt dużą liczbę to aplikacja android zalicza crash, jak uniknąć crashu i wykonać jakiś alternatywny blok kodu który zgłosi wyjątek?

Double Value = new Double(Math.pow(2, 10000)); // crash

poprawienie tagów wątku - @furious programming

1

Na Javie znam się średnio, ale wygląda mi to na przekroczenia zakresu double'a. Jakimś rozwiązaniem mogłoby być użycie BigDecimal, ale nie wiem, czy to najlepszy pomysł.

0
  1. Czy potrzebujesz obiektu? Wystarczy:
double Value=Math.pow(2, 10000);
  1. Chrzani waść:
import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		Double newValue = new Double(Math.pow(2, 10000)); // crash 
		double Value=Math.pow(2, 10000);
	}
}

http://ideone.com/o8Slyx

0

Też crash wywala, muszę zrobić jakieś zabezpieczenie.

double Value=Math.pow(2, 1024);
double val2 = 0;
String Error;

if(Value==Double.POSITIVE_INFINITY)
{
	 Error = "INFINITY";
			 
 }
else 
{
	val2 = Value;	 
}
return val2;
0
import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		Double newValue = new Double(Math.pow(2, 10000)); // crash 
		if(newValue.isInfinite()) System.out.println("INF");
		double Value=Math.pow(2, 10000);
		if(Double.isInfinite(Value)) System.out.println("INF");
	}
}

http://ideone.com/R3v9pU

0

Dzięki smoku
W sumie to dziwne, kiedy zamieniam Infinite na Double.NaN to jest dobrze jedynie Infinite w jakiś sposób psuje aplikację.
Dlaczego Double może zwrócić wartość "Infinity" lub "NaN"? skoro powinien zwracać tylko wartość zmiennoprzecinkową?
Według mnie jeśli wartość przekroczy zakres to powinna zwracać zero.

1

Według mnie jeśli wartość przekroczy zakres to powinna zwracać zero.

user image
A skąd byś wtedy wiedział że wynikiem jakiegoś działania nie było NaN/Inf tylko 0? Robiłeś dzielenie w stylu 0.0/0 albo 1.0/0 i uważasz że na miejscu byłoby zwrócenie tu 0? o_O Wróżę ci karierę w systemach bankowych...

0

Można stworzyć warunek sprawdzający czy dzieli się przez zero, chociaż masz rację tak "NaN" jest " jest łatwiej.

0

No niestety ale nie można. Bo mówimy tu o double a nie o intach. A jak podzielisz przez bardzo bardzo małą liczbę która nie jest zerem to co? ;]

0

Masz rację, dobra idę wysłać CV do banku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1