Максимално искористити бројеве са децималима

Један од најчешће коришћених типова података у Питхон-у је флоат, који представља бројеве са покретним зарезом. Бројеви са помичним зарезом су бројеви, позитивни или негативни, који имају децимално место. Бројеви са помичним зарезом такође укључују бројеве представљене коришћењем научног записа, са карактером е или Е који се користи за означавање степена 10.

Флоат је веома важан тип података јер може представљати широк спектар реалних бројева, од веома малих до веома великих бројева.

Примери бројева са покретним зарезом у Питхон-у су приказани у наставку:

# float numbers
a = 20.0
b = -51.51345
c = 65e7
d = -1.08E12
e = 2E10

print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))

Излаз:

<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>

Поред тога, они омогућавају прецизније прорачуне у поређењу са типовима података као што су цели бројеви, који уклањају разломак бројева. На пример, са целим бројевима, број као што је 3,142 би био представљен једноставно као 3.

Међутим, тип података флоат би представљао стварни број какав јесте, а то је 3,142. Према томе, флоат вредности су погодније за математичке прорачуне јер дају тачније резултате.

С тим у вези, вредности са покретним зарезом се широко користе у моделирању у стварном свету, машинском учењу, науци о подацима, финансијској и економској анализи, математичким прорачунима, графикама и визуелизацијама и научним и инжењерским прорачунима.

Интегерс вс. Флоат у Питхон-у

Цели бројеви су још један веома популаран тип података у Питхон-у. За разлику од бројева са покретним зарезом, цели бројеви немају децимални зарез. Цели бројеви се састоје од позитивних целих бројева, негативних бројева и нуле, од којих сви немају разломак.

Цели бројеви су корисни када изводимо операције које укључују целе бројеве, као што је бројање или индексирање. У Питхон-у, целобројне вредности су означене као инт.

Неки цели бројеви су приказани испод:

a = 0
b = 968
c = -14

print(type(a))
print(type(b))
print(type(c))

Излаз:

<class 'int'>
<class 'int'>
<class 'int'>

Неке од разлика између целих бројева и бројева са покретним зарезом у Питхон-у укључују:

ЦхарацтеристицИнтегерс(инт)Флоатинг Поинт Нумберс(флоат)РепресентВхоле бројеве, њихове негативне парњаке и нулу, све без децималног места. Реални бројеви са децималним зарезомПрецисионУнлимитед прецизност, стога не постоји ограничење колико дуга или велика вредност инт може бити. Једино ограничење ће бити доступна меморија у вашем систему. Имати ограничену прецизност. Највећа флоат вредност коју можете да сачувате је око 1,8 к 10308Употреба меморијеКористи мање меморије која плута.Користи више меморије од целобројних вредности. Битне операције Екстензивно се користе у битским операцијама Скоро се никада не користе у битским операцијама. већина математичких операција

  Како да видите све блокиране бројеве на вашем иПхоне-у

Различити начини за прављење и коришћење плутајућих у Питхон-у

Једноставан начин да почнете да радите са плутајућим вредностима у Питхон-у је да променљивој доделите флоат вредност на следећи начин:

# assign a variable a float value
a = 3.142

Други начин за добијање флоат вредности је конвертовање целих бројева и нумеричких низова у вредности са покретним вредностима помоћу конструктора флоат(). Ако проследимо целобројни или нумерички низ у флоат(), он ће бити конвертован у флоат вредност као што је приказано у наставку:

number1 = 2524
numString1 = "513.523"
numString2 = "1341"
# Convert to a float and store the float value in a variable
a = float(number1)
print(a)
b = float(numString1);
print(b)
c = float(numString2)
print(c)

Излаз:

2524.0
513.523
1341.0

У горњем примеру, цео број и стрингови се конвертују у флоат вредност помоћу флоат(), а затим се чувају у променљивој, која се затим штампа, показујући резултујућу вредност са плутајућим бројем након конверзије.

Други начин за добијање флоат вредности је извођење математичких прорачуна као што је дељење, као што је приказано у наставку:

num1 = 20
num2 = 3
result = num1/num2
print("Result of the division as an integer:")
print(int(20/3))
print("Result of the division as a float value:")
print(result)
print(type(result))

Излаз:

Result of the division as an integer:
6
Result of the division as a float value:
6.666666666666667
<class 'float'>

У горњем примеру приметите да нам вредност флоат даје тачнији одговор у поређењу са дељењем и враћањем резултата као целог броја.

Када радите са флоат бројевима у Питхон-у, можда ћете наићи на неке веома занимљиве резултате због тога како су вредности са плутајућим вредностима представљене интерно у рачунару. Бројеви са помичним зарезом су представљени у рачунарском хардверу као основни 2 (бинарни) разломци.

Међутим, већина децималних разломака, посебно оних са понављајућим децималима, не може се представити као тачан бинарни разломак. Као резултат тога, бројеви са покретним зарезом се обично чувају као апроксимација стварне вредности.

Да бисте ово практично видели, узмите у обзир флоат вредност 0,3. Ако променљивој доделите 0,3 интерно, она неће бити сачувана као тачно 0,3. Да бисмо то видели, можемо користити функцију формат() да видимо како је 0.3 интерно представљен. формат() нам омогућава да прикажемо жељени број значајних цифара вредности са којима радимо. У примеру испод, штампамо 0,3 до 20 значајних цифара да бисмо видели како се интерно чувају.

num = 0.3
print("num to 20 significant figures")
print(format(num, '.20f'))
print("Value we stored for num")
print(num)

Излаз:

num to 20 significant figures
0.29999999999999998890
Value we stored for num
0.3

Као што видите, вредност 0,3 коју смо доделили променљивој званој нум, није интерно ускладиштена као тачно 0,3. Када одштампате променљиву нум, добијате заокружену вредност.

  Како да поправите Роблок упозорење о малој меморији на вашем иПхоне-у

Због ове чињенице, можете добити неке неочекиване резултате када радите са флоат вредностима. На пример, ако треба да извршите ручно израчунавање од 0,3 + 0,3 + 0,3, ваш одговор ће бити 0,9. Међутим, према Питхон-у, то није случај јер интерно чува бинарне апроксимације стварне вредности. Ово се може видети у наставку:

sum = 0.3 + 0.3 + 0.3
answer = 0.9
print("Is sum equal to answer: ")
print(sum == answer)
print("The internal representation of of sum is: ")
print(sum)
print("The answer from manual calculation is: ")
print(answer)

Излаз:

Is sum equal to answer: 
False
The internal representation of of sum is: 
0.8999999999999999
The answer from manual calculation is: 
0.9

Стога, када радите са флоат вредностима, важно је имати на уму да Питхон не складишти тачне вредности интерно. Уместо тога, он чува приближне вредности стварне вредности.

Стога, када правите поређења између флоат вредности, можда ћете желети да прво заокружите на исти број значајних цифара. За већу прецизност када радите са бројевима са покретним зарезом у Питхон-у, размислите о коришћењу уграђеног децималног модула.

Децимални модул у Питхон-у

У ситуацијама када је висока прецизност важна и обавезна, као што су финансијске и научне прорачуне, коришћење флоат-а није идеално. Да би се гарантовала висока прецизност при раду са бројевима у покретном зарезу, користи се уграђени децимални број Питхон модула.

За разлику од флоат-а који се чува као бинарни прикази са помичним зарезом који су зависни од машине, децимални модул складишти бројеве са плутајућим зарезом користећи машински независан децимални приказ који нуди већу прецизност.

Поред тога, децимални модул може да представи децималне бројеве тачно онаквима какви јесу и да их користи тачно онаквима какви јесу у прорачунима. Такође нуди правилно заокружену децималну аритметику са плутајућим зарезом.

Да бисте почели да користите децимални модул, увезите га у своју Питхон датотеку на следећи начин:

import decimal

Да бисмо видели предности децималног модула, хајде да поновимо раније поређење између збира 0,3 + 0,3 + 0,3 и вредности 0,9. Код за ово је приказан испод:

import decimal

sum = decimal.Decimal('0.3') + decimal.Decimal('0.3') + decimal.Decimal('0.3')
answer = decimal.Decimal('0.9')
print("Is sum equal to answer: ")
print(sum == answer)
print("The internal representation of sum is: ")
print(sum)
print("The answer from manual calculation is: ")
print(answer)

Излаз:

Is sum equal to answer: 
True
The internal representation of sum is: 
0.9
The answer from manual calculation is: 
0.9

Због тога, када радите са бројевима са помичним зарезом и потребна вам је висока прецизност, не заборавите да увек користите децимални модул.

  Зашто је Миро најбољи избор за даљинску сарадњу?

Уобичајене грешке при раду са пловцима

Многе грешке које се јављају при раду са Флоат-ом у Питхон-у произилазе из неразумевања како Питхон интерно представља бројеве са помичним зарезом. На пример, вредност као што је 0,3 неће бити сачувана тачно као 0,3. Због тога ћете вероватно наићи на грешке ако радите са плутајућим вредностима, под претпоставком да су ускладиштене тачно онако како јесу.

Једна уобичајена грешка је грешка заокруживања на коју ћете наићи када изводите математичке прорачуне на вредностима са плутајућим вредностима. Пошто Питхон не може да представи стварне вредности са плутајућим вредностима, вероватно ћете наићи на грешке при заокруживању где резултати можда неће бити оно што очекујете.

Због грешака као што су грешке заокруживања, вероватно ћете наићи на грешке када покушате да направите поређења једнакости између вредности са покретним зарезом. Будите веома опрезни када радите са плутајућим у Питхон-у и будите свесни неочекиваних исхода.

Бољи начин да избегнете све грешке које се могу појавити док радите са флоат вредностима је да користите уграђени децимални модул. На овај начин ће резултати ваших израчунавања броја са плутајућим зарезом бити предвидљивији и тачнији.

Закључак

Као програмер који ради са Питхон-ом, обавезни сте да користите тип података флоат. Да бисте избегли грешке са овим типом података, важно је разумети како Питхон интерно представља бројеве са плутајућим бројем. Пошто Питхон не може да складишти стварне флоат бројеве, избегавајте вршење тачних поређења једнакости са вредностима са плутајућим вредностима. У супротном, наићи ћете на грешке.

У случају да су вам потребни тачни резултати у вашој апликацији, избегавајте коришћење флоат вредности. Уместо тога, користите уграђени децимални модул, који даје тачне резултате бројева са помичним зарезом и представља их тачно онаквима какви јесу и на начин независно од машина.

Такође можете прочитати Питхон Итертоолс функције и Питхон Три Екцепт.