locale в линукс

Това са environment променливи, които на ниво операционна система, задават системни настройки за език, формат на време, формат на валута и т.н…

Използват се от различни програми, които могат да имат нужда от тях за да знаят например как да форматират показваната информация.

https://www.tecmint.com/set-system-locales-in-linux/

IEEE Standard for Floating-Point Arithmetic (IEEE 754)

Half-precision floating-point format

In computinghalf precision is a binary floating-point computer number format that occupies 16 bits (two bytes in modern computers) in computer memory.

The IEEE 754 standard specifies a binary16 as having the following format:

https://en.wikipedia.org/wiki/Half-precision_floating-point_format

Single-precision floating-point format

Single-precision floating-point format is a computer number format, usually occupying 32 bits in computer memory;

https://en.wikipedia.org/wiki/Single-precision_floating-point_format

Biased Exponent

In floating-point arithmetic, a biased exponent is the result of adding some constant (called the bias) to the exponent chosen to make the range of the exponent nonnegative.

Bias 127 (код с излишък 127) е изкуствено добавяне на 127 към желаната експонента, демек ако искаме експонентата да ни е 6 добавяме 6 към 127 = 133

0000 0000 е все едно -127
0111 1111 e все едно 0
1000 0000 е все едно 127

To calculate the bias for an arbitrarily sized floating-point number apply the formula 2k−1 − 1 where k is the number of bits in the exponent.

Мантисата трябва да се нормализира, /тоест да е между 1 и 0.1/ за да се използва напълно обемът на разрядната мрежа.
1 > |a| >= 0.1

В някои процесори е прието условието за нормализирана мантиса да е 2 > |a| >= 1

Литература:

https://www.h-schmidt.net/FloatConverter/IEEE754.html

Четири поколения операционни системи

I-во поколение – края на 40-те – средата на 50-те

Трудно е да се говори за ОС в сегашният смисъл на думата. Нямало е почти никаква автоматизираност, работата на процесора е била горе-долу просто да му се подаде предварително написаната на перфокарти програма, тя да бъде изпълнена и да бъде върнат резултатът пак под формата на перфокарти.

Не е имало неща като управление на хардуера, на области от паметта и т.н… компютрите са били по-скоро едни електронни сметачни машини.

По време на изпълнение на програмата не е можело да се изпълняват входно-изходни операции. Двете са били напълно последователни – или едното, или другото.

Появяват се първите програми-помощници – асемблерите.

Появява се професията „оператор“ – човекът, отговорен за предварителното „написване“ програмата на перфокарти и четене на резултата.

II-ро поколение – средата на 50-те – средата на 60-те

Появавя се т.н. Batch processing – програмите се пакетират в пакети, съдържащи не само самата програма но и необходимите входно-изходни операции, инициализации, компилиране, управляване на областите от паметта…

Обособяват се два режима на работа на процесора:
User mode – изпълнение на потребителски програми;
System mode – управление на хардуера.

С цел уплътняване времето на процесора се появяват т,н, „сателити“ – устройства, които четат и запаметяват програмите от перфочетците върхи магнитен дист или лента и когато се натрупат достатъчно, се подават на процесора, после резултатите – пак на магнитата лента и от там – на перфопринтера.

III-то поколение – средата на 60-те – началото на 80-те

Първата многозадачност, първата многопотребителност.

Механизъм на прекъсванията – позволява рънтайм програмата да реагира на външни въздействия.

Механизъм за Direct Memory Access, който заедно с механизма на прекъсванията позволява паралелност между работата на процесора и входно-изходните операции.

Ето тук изгрява звездата на портовете – области от паметта, с помощта на които програмата може да взаимодейства с външният свят по време на изпълнение.

Канали за данни (I/O processors) – служат за обмен на данни с периферни устройства.

Системи за работа с бавни входно-изходни устройства – SPOOLing (Simultaneous Peripheral Operation On-line)

Мултипрограмиране – по-уплътнено използване на процесорното време. Когато процесорът стартира изпълнението на дадена програма, която спре и чака входно изходна операция да се изпълни, това време би било загубено. Затова процесорът използва това време за друга програма.

Времеделение – от това нововъведение идва и многозадачността – на всяка програма се предостава циклично повтарящ се интервал процесорно време – квант.

Като извод: С трето поколение, операционните системи вече наподобяват съвременните. Компютрите вече не са просто електронни сметачни машини, на които се подава топка перфокарти, те я изпълняват, като през това време не могат да правят нищо друго, и връщат резултатът под формата на нова топка перфокарти.

IV-то поколение – след началото на 80-те

Появяват се многопроцесорните компютри, настъпва бум на персоналните компютри, появяват се мрежовите операционни системи.

Бройни системи

Непозиционни – такива, при които стойността, която дадената цифра не зависи от позицията и в числото. Числата се формират само чрез събиране или изваждане (адитивни) или умножение на съседни цифри. Няма цифра „0“.
Пример: римската БС – числото XXII (22) – формира се като се съберат две десятки и една двойка.

Позиционни (още „тегловно значими“) – стойността на дадена цифра зависи не само от външният и вид, но от позицията и в числото. Има цифра „0“. Напр.: „4“ на първа позиция е числото 4, но на втора – числото 40, на трета – 400 и т.н…
Пример: десетична и двоична БС.

Позиционните се делят на еднородни и нееднородни в зависимост от това дали основата е една и съща за всички позиции (разреди).
Пример за еднородна – десетичната. Напр. числото 4593 е
4×103 + 5×102 + 9×101+3×100
Пример за нееднородна – система за измерване на времето:
секунди p=60
минути p=60
часове p=24
дни p=7
месеци p=12

Защо именно двоичната БС е избрана за ЦИМ?
Нека видим следните параметри и коя БС е най-подходяща.
1) лесно общуване човек-машина – Десетична
2) опростена електроника – Двоична
3) шумоустойчивост – Двоична

Decimal vs. Float

Най-просто – float закръгля, защото няма зададена прецизност, както decimal и обикновено съдържа безкрайни дроби.

При decimal се знае, че 0.333 е точно 0.333, a не 0.33333333333…∞ закръглено до 0.333333334, или отрязано до някъде.

Затова decimal е най-пододящ например за съхраняване на парични суми.

Float is Approximate-number data type, which means that not all values in the data type range can be represented exactly , it round up the values.

Where as Decimal is Fixed-Precision data type, which means that all the values in the data type range can be represented exactly with precision and scale, it doesn’t round up the values.

Use decimal for counted values
Use float/double for measured values

Some examples:

  • money (do we count money or measure money?)
  • distance (do we count distance or measure distance?)
  • scores (do we count scores or measure scores?)

We always count money and should never measure it. We usually measure distance. We often count scores.

Float се използва за сухраняване на стойности, които могат да бъдат закръглени поради това, че точната им стойност може и да не е ясна.

Decimal – обратното, трябва да знаем точно стойността, без закръгляне, без „отрязване“. С конкретна точност.