liczby id 267873 Nieznany

background image

java
/liczby

1

Liczby



TYP WBUDOWANY

OBIEKT

WIELKO

(BAJTY)

byte

Byte

1

short

Short

2

int

Integer

4

long

Long

8

float

Float

4

double

Double

8

char

Character

2



liczby zawieraj ce cz

dziesi tn s domy lnie traktowane jako double


float f=3.0;

// to da bł d kompilacji


float f=3f;
float f=3.0f;

// trzy ró ne sposoby, eby było dobrze

float f=(float)3.0;

te same problemy pojawiaj si w przypadku zapisywania int w zmiennych
short, byte lub char trzeba zrobi rzutowanie


problemy z ułamkami


double d=2/3*5;

// ==0 bo 2/3 == 0


double d= 2d/3d * 5;

// ==3.33333333333333 tak jest OK



dzielenie liczby całkowitej przez zero (5/0) powoduje rzucenie wyj tku
ArithmeticException


dzielenie liczby rzeczywistej przez zero nie powoduje bł du, ale daje
Double.POSITIVE_INFINITY/Double.NEGATIVE_INFINITY


double d=123, e=0;
if (d/e == Double.POSITIVE_INFINITY)
System.out.println("nieskonczonosc");

stała Double.NaN (Not A Number) reprezentuje wynik operacji np. 0.0/0.0

do sprawdzania czy wynik operacji jest NaN powinna by wykorzystywana

metoda isNan() z klasy Double, a nie porównanie z NaN (bo NaN!=NaN)


double s = Math.sqrt(-1);
if (s == Double.NaN)
System.out.println("tego nie wypisze");
if (Double.isNaN(s))
System.out.println("to wypisze");

background image

java
/liczby

2

zaokr glanie


int k=(int)3.999;

// ==3 przez rzutowanie


int k=(int)Math.round(3.999);

// ==4 tak lepiej

int k=(int)Math.floor(3.999);

// ==3




class java.lang.Math


metody statyczne


double abs(double a)
float abs(float a)
int abs(int a)
long abs(long a)

warto

bezwzgl dna

double acos(double a)

arccos cosinus w zakresie [0,Pi]

double asin(double a)

arcsin w zakresie [–Pi/2,Pi/2]

double atan(double a)

arctan w zakresie [–Pi/2,Pi/2]

double atan2(double a, double b) pzekształca współrz dne prostok tne (a,b)

na biegunowe (r,theta)

double ceil(double a)

zwraca kres górny lub najmniejsz ze
wszystkich liczb wi kszych lub równych a

double cos(double a)

zwraca cos k ta

double exp(double a)

eksponenta

double floor(double a)

zwraca kres dolny lub najwi ksz z
wszystkich liczb mniejszych lub równych a

double IEEEremainder(double f1 ,
double f2)

reszta z dzielenia f1 przez f2
(zgodnie z norm IEEE 754)

double log(double a)

ln(a)

double max(double a, double b)
double max(float a, float b)
int max(int a, int b)
long max(long a, long b)

zwraca warto

wi kszej z dwóch liczb

double min(double a, double b)
double min(float a, float b)
int min(int a, int b)
long min(long a, long b)

zwraca warto

mniejszej z dwóch liczb

double pow(double a, double b)

zwraca warto

liczby a podniesionej do

pot gi b

double rint(double b)

przekształca liczb typu double w liczb
całkowit tak e typu double

long round(double a)
int round(float a)

zaokr gla liczb przez dodanie 0.5 do
liczby zaokr glonej, a nast pnie wybranie
najwi kszej liczby całkowitej, która jest
wi ksza lub równa nowej liczbie

double sin(double a)

zwraca sin k ta

double sqrt(double a)

pierwiastek kwadratowy

double tan(double a)

zwraca tan k ta


stałe


Math.cos(Math.PI);
Math.log(Math.E);

//log(e)

background image

java
/liczby

3

class java.lang.StrictMath

je li planujemy uruchamia program na wielu paltformach to ta klasa jest
lepsza od Math, poniewa reprezentuje liczby dokładniej, zatem przy
operacjach matematycznych ró nice oblicze (je li s ) s minimalne




class java.util.BitSet

do operacji na nieci głym zbiorze liczb całkowitych


BitSet b=new BitSet();
b.set(0);
b.set(3);
String data[]={”ala”,”bela”,”cela”,”adela”};

for (i=0; i<20; i++)
if (b.get(i))

// p tla po zbiorze nieci głym

System.out.println(data[i]); // “ala” “adela”





KONWERSJE


konwersja pomi dzy systemami zapisu liczb całkowitych metody
statyczne z odpowiedniej klasy (typu) liczby (np. Integer)

String toBinaryString()

String toOctalString()

String toHexString()


int i=42;
System.out.println(i + „w postaci binarnej to ” +

Integer.toBinaryString(i)

);



String bin=”101010”;
System.out.println(bin + „w postaci dziesi tnej to ” +
Integer.

valueOf

(bin,2));

// drugi argument okre la jak zapisano liczb :
// 2-binarnie, 8-ósemkowo, 10-dziesi tnie,
// 16-szesnastkowo
// valueOf() zwraca String



konwersja obiektów klas opakowuj cych typy proste do typów prostych

typ typ

Value()


int intValue()
double doubleValue()
float floatValue()
long longValue()
short shortValue()
byte byteValue()

background image

java
/liczby

4


Integer in=new Integer("8");

// Integer ze Stringu

Integer in2=new Integer(6);

// Integer z int

int kk = in.intValue()+in2.intValue();
System.out.println(kk);

// 14


Double dd=new Double("2.3e2");
Double dd2=new Double(4.5);
double dk = dd.doubleValue()+dd2.intValue();

// 230+4

System.out.println(dk);

// 234




zamiana napisu na liczb metoda z klasy, której typu ma by liczba

int Integer.parseInt(String)

double Double.parseDouble(String)

Integer Integer.valueOf(String)

Double Double.valueOf(String)



// konwersja ła cucha znaków na liczb oraz okre lenie, czy dany napis to
// liczba zmiennoprzecinkowa (tzn. zawiera „.”, „e”, „d”) czy całkowita

String s=argv[0]; // pierwszy parametr z lini polece , zakładamy, e liczba
double d;
int i;
if (s.indexOf(‘.’) >0 || s.indexOf(‘d’) >0 || s.indexOf(‘e’) >0)

try {
d = Double.parseDouble(s);
System.out.println("Liczba zmiennoprzecinkowa: " + d);
return;
}
catch (NumberFormatException e) {
System.out.println("Nieprawidłowa liczba zmiennoprzecinkowa: " + s);
return;
}
else
try {
i = Integer.parseInt(s);
System.out.println("Liczba całkowita: " + i);
return;
}
catch (NumberFormatException e2) {
System.out.println("Dane wej ciowe nie s liczb :" + s);
}



zamiana liczby na napis metody z klasy

String

static String valueOf(int)

static String valueOf(double)


int a =12;
String napis;
napis =String.valueOf(a);
System.out.println(napis);

background image

java
/liczby

5

FORMATOWANIE LICZB




import java.text.*;

final double a=100.2345678;
final double b=3.14;
final double c=1024.25;

NumberFormat form = NumberFormat.getInstance(); //dostosowanie do ustawie
//lokalnych

// definiujemy format o postaci 999.99[99]
form.setMinimumIntegerDigits(3);
form.setMinimumFractionDigits(2);
form.setMaximumFractionDigits(4);

System.out.println("Liczba " + a + "\t zostaje sformatowana do postaci " +
form.format(a)); // 100,2346
System.out.println("Liczba " + b + "\t zostaje sformatowana do postaci " +
form.format(b)); // 003,14


NumberFormat f1 = NumberFormat.getInstance();
// metoda

toPattern()

zawraca kombinacj znaków specjalnych

// (patrz tabelka) wykorzystywan przez ustawienia
// lokalne jako wzorzec do formatowania liczb
System.out.println("Wzorzec domy lny: " + ((DecimalFormat)f1).toPattern());

// #,##0.###


NumberFormat f2 = new DecimalFormat("##0.##");
System.out.println("Wzorzec ustawiony: "+((DecimalFormat)f2).toPattern());

System.out.println("Liczba " + c + " zostaje sformatowana do postaci " +
f1.format(c)); // 1 024,25

System.out.println("Liczba " + a " zostaje sformatowana do postaci " +
f2.format(a)); // 100,23

System.out.println("Liczba " + a + " zostaje sformatowana do postaci " +
f1.format(a) + " przy wykorzystaniu domy lnego wzorca"); // 100,235



ZNAK ZNACZENIE

#

cyfra (zera na pocz tku pomijane)

0

cyfra (zera na pocz tku wy wietlane)

.

separator cz

ci dziesi tnej – zale y od ustawie lokalnych

,

separator grupuj cy – zale y od ustawie lokalnych

-

oznaczenie liczby ujemnej – zale ne od ustawie lokalnych

%

wy wietlenie liczby jako warto ci procentowej

;

rozdziela dwa formaty liczby – pierwszy do prezentacji
warto ci dodatnich, a drugi warto ci ujemnych

wy wietlenie jednego z powy szych znaków

inne wy wietlane w takiej postaci jak zostały wpisane



background image

java
/liczby

6

DU E LICZBY


pakiet java.math

obsługa liczb przekraczaj cych Long.MAX_VALUE lub Double.MAX_VALUE

obiekty poni szych klas s niezmienne wobec tego istniej metody
zwracaj ce nowe obiekty zawieraj ce zmodyfikowan warto

obiektu

oryginalnego:

negate()

,

add()

,

compareTo()

,

equals()

i inne


java.math.BigInteger



BigInteger bInt = new BigInteger("3419229223372036854775807");
System.out.println("bardzo du a liczba całkowita: " + bInt);
System.out.println("ta sama liczba w formie zmiennoprzecinkowej: " +
bInt.doubleValue());

klasa BigInteger jest wykorzystywana głównie w kryptografii np. metoda
isProbablyPrime() – zwraca pary liczb pierwszych



java.math.BigDecimal


porównywanie wyników operacji na liczbach rzeczywistych jest tylko
przybli one (ró nica mniejsza ni epsilon) wi c je li chcemy pełn
dokładno

to trzeba działa na obiektach klasy

BigDecimal

(dokładno

jest tu ograniczona tylko pami ci )



// kalkulator operuj cy na bardzo du ych liczbach

import java.util.Stack;
public static Object[] input = {
new BigDecimal("3419229223372036854775807.23343"),
new BigDecimal("2.0"),
"*", "=", };

Stack s = new Stack();
for (int i = 0; i < input.length; i++) {
Object o = input[i];
if (o instanceof BigDecimal) s.push(o);
else if (o instanceof String) {
switch (((String)o).charAt(0)) {
case '+': s.push(((BigDecimal)s.pop()).add((BigDecimal)s.pop()));
break;
case ‘-‘: s.push(((BigDecimal)s.pop()).subtract((BigDecimal)s.pop()));
break;
case ‘*’: s.push(((BigDecimal)s.pop()).multiply((BigDecimal)s.pop()));
break;
case ‘/’: s.push(((BigDecimal)s.pop()).divide((BigDecimal)s.pop(),
BigDecimal.ROUND_UP)); break;
case ‘=’: System.out.println(s.pop());
break; } } }

background image

java
/liczby

7

LICZBY LOSOWE


class java.lang.Math


metoda: static double random(): daje dodatni liczb losow podwójnej
precycji z przedziału [0,1)


System.out.println(“liczba losowa “+ Math.random()); // 0-1

class java.util.Random


daje lepsze liczby losowe ni Math

inicjalizacja generatora


import java.util.Random;
. . .
Random r = new Random();

// inicjuje generator na podstawie aktualnego
// czasu w mse

lub

Random r = new Random(long seed);

// inicjuje generator na podstawie
// liczby

metody zwracaj odpowiednie liczby pseudolosowe typów wbudowanych


boolean nextBoolean()

zwraca losowo true albo false


double nextDouble() podwójnej precyzji [0,1]
float nextFloat()

liczb rzeczywist [0,1]


int nextInt()

zwraca pseudolosow liczb losow int z pełnego zakresu

long nextLong() zwraca pseudolosow liczb losow long z pełnego zakresu

int nextInt(int n);

zwraca pseudolosow liczb całkowit [0,n]



System.out.println(“całkowita liczba losowa 1-10 „+ 1+ r.nextInt(10));
// nextInt(10) 0-9

powy sze metody generuj liczby pseudolosowe o rozkładzie jednorodnym


double nextGaussian();

zwraca pseudolosow liczb podwójnej precyzji

o rozkładzie Gaussa



System.out.println(“jednorodny: “+r.nextDouble()+
”Gauss: “+r.nextGaussian());


background image

java
/liczby

8

OPERACJE NA BITACH


bit najbardziej znacz cy (najstarszy) jest najbardziej po lewej,
najmłodszy – po prawej

dla typów

byte

,

short

,

int

,

long

najstarszy bit jest bitem znaku

=1

liczba ujemna

=0

liczba dodatnia

(np. byte: od –128 =10000000 do 127 =01111111)

typ

char

: najstarszy bit nie jest traktowany jak znak st d (przy 2

bajtach na znak) 0-65536 znaków

~

uzupełnienie do jedynki

^

XOR

operatory przesuni

bitowych: >> i <<


byte b=1; // 00000001 =1
b<<1; // 00000010 =2
b<<4; // 00010000 =16

o przy przesuwaniu w lewo << : młodsze (zwalniane) bity s

zapełniane zerami

o przy przesuwaniu w prawo >> : zwalniane bity s zapełniane bitem

znaku (propagacja bitu znakowego)

o przy przesuwaniu >>> niezale nie od warto ci bitu znaku zwalniane

bity s zapełniane zerami


b=-1;

// 11111111 = -1

b>>4;

// 11111111 = -1

o je li przy przesuni ciu nie ma miejsca na promocj nast puje

zmiana znaku

int i=Integer.MAX_VALUE;

// 2147483647

i<<1;

// -2


byte b=Byte.MAX_VALUE;

// 127

(byte)(b<<1)

// -2

o przy przesuni ciu w lewo bitów najwi kszej liczby w danym typie

nast puje promocja do int (z byte, short, char) lub long (z int,
long)

o operacja a>>n to a/2^n

wyzerowanie najmłodszego bitu całkowitej zmiennej x niezale nie od jej
typu


x = x & ~0x1;


Wyszukiwarka

Podobne podstrony:
karty liczby id 232712 Nieznany
liczby 0 9 8 id 268022 Nieznany
liczby 0 9 5 id 268021 Nieznany
liczby zespolone 6 id 267992 Nieznany
Liczby Zespolone id 267996 Nieznany
LICZBY ZESPOLONE id 267979 Nieznany
Liczby zespolone www1 id 268011 Nieznany
Glowne liczby kwantowe id 18507 Nieznany
liczby zespolone 6 id 267992 Nieznany
Abolicja podatkowa id 50334 Nieznany (2)
4 LIDER MENEDZER id 37733 Nieznany (2)
katechezy MB id 233498 Nieznany
metro sciaga id 296943 Nieznany
perf id 354744 Nieznany
interbase id 92028 Nieznany
Mbaku id 289860 Nieznany

więcej podobnych podstron