1. వాస్తవ సంఖ్యలను చుట్టుముట్టడం

మేము ఇప్పటికే చర్చించినట్లుగా, ఒక వాస్తవ సంఖ్య వేరియబుల్‌కు కేటాయించబడినప్పుడు int, అది ఎల్లప్పుడూ సమీప చిన్న పూర్ణాంకానికి గుండ్రంగా ఉంటుంది - పాక్షిక భాగం కేవలం విస్మరించబడుతుంది.

కానీ పాక్షిక సంఖ్యను ఏ దిశలో అయినా సమీప పూర్ణాంకంతో చుట్టుముట్టాల్సిన అవసరం ఉన్నపుడు లేదా చుట్టుముట్టాల్సిన పరిస్థితిని ఊహించడం సులభం. ఈ సందర్భంలో మీరు ఏమి చేస్తారు?

దీని కోసం మరియు అనేక సారూప్య పరిస్థితుల కోసం, జావా తరగతిని కలిగి ఉంది Math, ఇది round(), ceil(), మరియు floor()పద్ధతులను కలిగి ఉంటుంది.


Math.round()పద్ధతి

Math.round()పద్ధతి ఒక సంఖ్యను సమీప పూర్ణాంకానికి పూర్తి చేస్తుంది:

long x = Math.round(real_number)

కానీ ఇక్కడ మరొక సూక్ష్మభేదం ఉంది: ఈ పద్ధతి పూర్ణాంకాన్ని అందిస్తుంది long(ఒక కాదు int). వాస్తవ సంఖ్యలు చాలా పెద్దవిగా ఉన్నందున, జావా సృష్టికర్తలు జావాలో అందుబాటులో ఉన్న అతిపెద్ద పూర్ణాంక రకాన్ని ఉపయోగించాలని నిర్ణయించుకున్నారు: long.

తదనుగుణంగా, ప్రోగ్రామర్ ఫలితాన్ని వేరియబుల్‌కు కేటాయించాలని అనుకుంటే int, అప్పుడు ఆమె డేటా యొక్క సంభావ్య నష్టాన్ని అంగీకరిస్తుందని కంపైలర్‌కు స్పష్టంగా సూచించాలి (ఫలితంగా వచ్చిన సంఖ్య ఒక రకానికి సరిపోని సందర్భంలో int).

int x = (int) Math.round(real_number)

ఉదాహరణలు:

ప్రకటన ఫలితం
int x = (int) Math.round(4.1);
4
int x = (int) Math.round(4.5);
5
int x = (int) Math.round(4.9);
5

Math.ceil()పద్ధతి

పద్ధతి ఒక పూర్ణాంకం వరకు సంఖ్యనుMath.ceil() పూర్తి చేస్తుంది . ఇక్కడ ఉదాహరణలు ఉన్నాయి:

ప్రకటన ఫలితం
int x = (int) Math.ceil(4.1);
5
int x = (int) Math.ceil(4.5);
5
int x = (int) Math.ceil(4.9);
5

Math.floor()పద్ధతి

పద్ధతి Math.floor()సంఖ్యను పూర్ణాంకం వరకు పూర్తి చేస్తుంది. ఇక్కడ ఉదాహరణలు ఉన్నాయి:

ప్రకటన ఫలితం
int x = (int) Math.floor(4.1);
4
int x = (int) Math.floor(4.5);
4
int x = (int) Math.floor(4.9);
4

వాస్తవానికి, ఒక సంఖ్యను పూర్ణాంకానికి చుట్టుముట్టేటప్పుడు , టైప్ కాస్ట్ ఆపరేటర్‌ని ఉపయోగించడం సులభం:(int)

ప్రకటన ఫలితం
int x = (int) 4.9
4

ఈ పేర్లను గుర్తుంచుకోవడం మీకు కష్టమైతే, ఒక చిన్న ఆంగ్ల పాఠం సహాయం చేస్తుంది:

  • Mathగణితం అని అర్థం
  • Roundగుండ్రని అర్థం
  • Ceilingసీలింగ్ అని అర్థం
  • Floorఅంతస్తు అని అర్థం

2. ఫ్లోటింగ్ పాయింట్ సంఖ్యలు ఎలా నిర్మాణాత్మకంగా ఉంటాయి

రకం నుండి వరకు doubleపరిధిలో విలువలను నిల్వ చేయగలదు . ఈ భారీ శ్రేణి విలువలు (రకంతో పోలిస్తే ) రకం (అలాగే ) పూర్ణాంకాల రకాల కంటే పూర్తిగా భిన్నమైన అంతర్గత నిర్మాణాన్ని కలిగి ఉండటం ద్వారా వివరించబడింది . అంతర్గతంగా, రకం దాని విలువను రెండు సంఖ్యలుగా ఎన్కోడ్ చేస్తుంది: మొదటిది మాంటిస్సా అని పిలుస్తారు మరియు రెండవది ఘాతాంకం అని పిలుస్తారు .-1.7*10308+1.7*10308intdoublefloatdouble

మన దగ్గర నంబర్ ఉందని చెప్పండి 123456789మరియు దానిని doubleవేరియబుల్‌గా నిల్వ చేయండి. మనం చేసినప్పుడు, ఆ సంఖ్య కు మార్చబడుతుంది మరియు అంతర్గతంగా రకం రెండు సంఖ్యలను నిల్వ చేస్తుంది — మరియు . Significand ("సంఖ్యలో ముఖ్యమైన భాగం" లేదా mantissa) ఎరుపు రంగులో హైలైట్ చేయబడింది, అయితే ఘాతాంకం నీలం రంగులో హైలైట్ చేయబడింది.1.23456789*108double234567898

ఈ విధానం చాలా పెద్ద సంఖ్యలు మరియు చాలా చిన్న వాటిని నిల్వ చేయడానికి సాధ్యపడుతుంది. కానీ సంఖ్య యొక్క ప్రాతినిధ్యం 8 బైట్‌లకు (64 బిట్‌లు) పరిమితం చేయబడినందున మరియు కొన్ని బిట్‌లు ఘాతాంకాన్ని నిల్వ చేయడానికి ఉపయోగించబడతాయి ( అలాగే మాంటిస్సా యొక్క చిహ్నం మరియు ఘాతాంకం యొక్క చిహ్నం), మాంటిస్సాను సూచించడానికి అందుబాటులో ఉన్న గరిష్ట అంకెలు 15 ఉంది .

ఇది వాస్తవ సంఖ్యలు ఎలా నిర్మించబడతాయో చాలా సరళమైన వివరణ.


3. వాస్తవ సంఖ్యలతో పని చేస్తున్నప్పుడు ఖచ్చితత్వం కోల్పోవడం

వాస్తవ సంఖ్యలతో పని చేస్తున్నప్పుడు, వాస్తవ సంఖ్యలు ఖచ్చితమైనవి కావని ఎల్లప్పుడూ గుర్తుంచుకోండి . దశాంశం నుండి బైనరీకి మార్చేటప్పుడు ఎల్లప్పుడూ రౌండింగ్ లోపాలు మరియు మార్పిడి లోపాలు ఉండవచ్చు . అదనంగా, సమూలంగా భిన్నమైన స్కేల్స్‌లో సంఖ్యలను జోడించడం/తీసివేసేటప్పుడు లోపం యొక్క అత్యంత సాధారణ మూలం ఖచ్చితత్వం కోల్పోవడం .

ఈ చివరి వాస్తవం అనుభవం లేని ప్రోగ్రామర్‌లకు కొద్దిగా మనసును కదిలించేది.

నుండి తీసివేస్తే మనకు లభిస్తుంది .1/109109109

పూర్తిగా భిన్నమైన ప్రమాణాలపై సంఖ్యలను తీసివేయడం వివరణ
 1000000000.000000000;
-         0.000000001;
 1000000000.000000000;
రెండవ సంఖ్య చాలా చిన్నది , ఇది దాని ప్రాముఖ్యతను కలిగిస్తుంది మరియు (బూడిద రంగులో హైలైట్ చేయబడింది) విస్మరించబడుతుంది. 15 ముఖ్యమైన అంకెలు నారింజ రంగులో హైలైట్ చేయబడ్డాయి.

మేము ఏమి చెప్పగలం, ప్రోగ్రామింగ్ అనేది గణితానికి సమానం కాదు.


4. వాస్తవ సంఖ్యలను పోల్చినప్పుడు ఆపద

ప్రోగ్రామర్లు వాస్తవ సంఖ్యలను పోల్చినప్పుడు మరొక ప్రమాదం వేచి ఉంది. వాస్తవ సంఖ్యలతో పని చేస్తున్నప్పుడు ఇది పుడుతుంది, ఎందుకంటే రౌండ్-ఆఫ్ లోపాలు పేరుకుపోతాయి. ఫలితం ఏమిటంటే, వాస్తవ సంఖ్యలు సమానంగా ఉండాలని ఆశించే పరిస్థితులు ఉన్నాయి, కానీ అవి కాదు. లేదా వైస్ వెర్సా: సంఖ్యలు భిన్నంగా ఉండాలని భావిస్తున్నారు, కానీ అవి సమానంగా ఉంటాయి.

ఉదాహరణ:

ప్రకటన వివరణ
double a = 1000000000.0;
double b = 0.000000001;
double c = a - b;
వేరియబుల్ విలువ a ఉంటుంది 1000000000.0
వేరియబుల్ విలువ c ఉంటుంది 1000000000.0
(వేరియబుల్‌లోని సంఖ్య b చాలా తక్కువగా ఉంటుంది)

పై ఉదాహరణలో, aమరియు cసమానంగా ఉండకూడదు, కానీ అవి.

లేదా మరొక ఉదాహరణ తీసుకుందాం:

ప్రకటన వివరణ
double a = 1.00000000000000001;
double b = 1.00000000000000002;
వేరియబుల్ విలువ a ఉంటుంది 1.0
వేరియబుల్ యొక్క విలువ b ఉంటుంది1.0

5. గురించి ఒక ఆసక్తికరమైన వాస్తవంstrictfp

జావాకు ఒక ప్రత్యేక strictfpకీవర్డ్ ఉంది ( స్ట్రిక్ట్ ఫ్ లోటింగ్ పి ఆయింట్ ), ఇది ఇతర ప్రోగ్రామింగ్ భాషలలో కనిపించదు. మరియు మీకు ఇది ఎందుకు అవసరమో మీకు తెలుసా? ఇది ఫ్లోటింగ్ పాయింట్ సంఖ్యలతో కార్యకలాపాల యొక్క ఖచ్చితత్వాన్ని మరింత దిగజార్చుతుంది . ఇది ఎలా జరిగిందనే దాని కథ ఇక్కడ ఉంది:

జావా సృష్టికర్తలు:
జావా చాలా ప్రజాదరణ పొందాలని మరియు సాధ్యమైనంత ఎక్కువ పరికరాలలో జావా ప్రోగ్రామ్‌లను అమలు చేయాలని మేము నిజంగా కోరుకుంటున్నాము. కాబట్టి మేము జావా మెషీన్ యొక్క స్పెసిఫికేషన్ ప్రకారం అన్ని ప్రోగ్రామ్‌లు అన్ని రకాల పరికరాలలో ఒకే విధంగా అమలు చేయబడాలని నిర్ధారిస్తున్నాము !
ఇంటెల్ ప్రాసెసర్ల తయారీదారులు:
హే, అందరూ! మేము మా ప్రాసెసర్‌లను మెరుగుపరిచాము మరియు ఇప్పుడు అన్ని వాస్తవ సంఖ్యలు మా ప్రాసెసర్‌లలో 8-బైట్‌లకు బదులుగా 10-బైట్‌లను ఉపయోగించి సూచించబడతాయి. మరిన్ని బైట్‌లు అంటే మరింత ముఖ్యమైన అంకెలు. అంటే ఏమిటి? నిజమే! ఇప్పుడు మీ శాస్త్రీయ లెక్కలు మరింత ఖచ్చితమైనవి!
శాస్త్రవేత్తలు మరియు అల్ట్రా-కచ్చితమైన గణనలలో పాల్గొన్న ప్రతి ఒక్కరూ:
కూల్! బాగా చేసారు. అద్భుతమైన వార్తలు!
జావా సృష్టికర్తలు:
కాదు-కాదు-కాదు, మీరు అబ్బాయిలు! అన్ని జావా ప్రోగ్రామ్‌లు తప్పనిసరిగా అన్ని పరికరాలలో ఒకే విధంగా అమలు చేయాలని మేము ఇప్పటికే మీకు చెప్పాము . మేము Intel ప్రాసెసర్‌లలో 10-బైట్ వాస్తవ సంఖ్యలను ఉపయోగించగల సామర్థ్యాన్ని బలవంతంగా నిలిపివేయబోతున్నాము.
ఇప్పుడు మళ్లీ అంతా బాగానే ఉంది! మాకు కృతజ్ఞతలు చెప్పవద్దు.
శాస్త్రవేత్తలు మరియు అల్ట్రా-కచ్చితమైన గణనలలో పాల్గొన్న ప్రతి ఒక్కరూ:
మీకు పూర్తిగా పిచ్చి పట్టిందా? త్వరగా ప్రతిదీ తిరిగి పొందండి!
జావా సృష్టికర్తలు:
గైస్, ఇది మీ స్వంత మంచి కోసం! ఊహించండి: అన్ని జావా ప్రోగ్రామ్‌లు అన్ని పరికరాలలో ఒకే విధంగా నడుస్తాయి . చాలా బాగుంది!
శాస్త్రవేత్తలు మరియు అల్ట్రా-కచ్చితమైన గణనలలో పాల్గొన్న ప్రతి ఒక్కరూ:
లేదు. ఇది అస్సలు చల్లగా లేదు. ప్రతిదీ ఎలా ఉందో త్వరగా ఉంచండి! లేదా మేము మీ జావాను ఎక్కడ ఉంచుతారో తెలుసా?
జావా సృష్టికర్తలు:
హ్మ్. వెంటనే ఎందుకు చెప్పలేదు? వాస్తవానికి, మేము దానిని తిరిగి ఉంచుతాము.
మేము తాజా ప్రాసెసర్‌ల యొక్క అన్ని లక్షణాలను ఉపయోగించగల మీ సామర్థ్యాన్ని పునరుద్ధరించాము.
అదేంటంటే... మేము ప్రత్యేకంగా strictfpకీవర్డ్‌ని కూడా భాషకు జోడించాము. మీరు దానిని ఫంక్షన్ పేరుకు ముందు వ్రాస్తే, ఆ ఫంక్షన్‌లోని వాస్తవ సంఖ్యలతో కూడిన అన్ని ఆపరేషన్‌లు అన్ని పరికరాల్లో సమానంగా చెడ్డవిగా ఉంటాయి !