áá¯ááºáá±ááŒá®ážáá±á¬ááº
PostgreSQL á á¬áááºážááœáẠááá¯ááá¯áá¯ááºáá¯ááºáá±á¬áºááŒáááº- "ááá¯áá²á·ááá¯á·áá±á¬ á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááŒááºážááŸáá·áº ááœááºáá»ááºááŸá¯á¡ááœááºáž áááºážááá¯á·á ááŒáá·áºááœá¬ážááŸá¯ááẠáááºá¹áá»á¬ááŸáá·áº ááœááºáá»á°áá¬áááá¹áá¶á áá¬áá¬áááºááœá²áá áºáá¯áá¯á¶ážá áá¬áá¬áááºááŒá áºááŒá®áž á€áá±áá¬ááœáẠá¡áá»á¯á¶ážááááºáá«" (á á¬áááºáá°ááᯠIEEE 754 á á¶ááŸá¯ááºážááá¯á· ááá¬ááŸáá áœá¬ áááºááœáŸááºážáá±á ááº)á á€áá±áá¬ááœáẠáááºááá¯á·áá±á¬ á¡ááŸá¬ážáá»á¬ážááᯠááá¯ááá¯ááááºážá á¡á²áá«ááœá±ááᯠá¡á á®á¡á á¥áºáá²á· ááœá±ážááœá±ážááŒáá·áºáá¡á±á¬ááºá áá¬ááŒá±á¬áá·áº áá±á¬ááºáááºááᯠáááºáá°ááá²ááá¯áᬠáááŒá¬áááºááŸá¬ ááŸááºážááœá¬ážáá«áááá·áºáááºá
á¥ááá¬á¡á¬ážááŒáá·áº ááá¯ážááŸááºážáá±á¬ áá±á¬ááºážááá¯áá»ááºááᯠááŒáá·áºááŒáá«á áá¯á·á
********* ÐÐÐÐ ÐС *********
SELECT 0.1::REAL;
**************************
float4
--------
0.1
(1 ÑÑÑПка)
ááááºá¡áá±ááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡áá°ážáááẠáááœá±á·ááá±á¬á·áá« - áá»áŸá±á¬áºááá·áºáá¬ážáá±á¬ 0.1 ááᯠáááŸááá«áááºá áá«áá±ááá·áº á¡áᯠ0.1 áá²á· ááŸáá¯ááºážááŸááºááŒáá·áºáá¡á±á¬ááºá
********* ÐÐÐÐ ÐС *********
SELECT 0.1::REAL = 0.1;
**************************
?column?
----------
f
(1 ÑÑÑПка)
áááºážáá°ááá¯ááºáá°áž! á¡áááºá¡á¶á·ááœááºáááºážá áá«áá±ááá·áº áá±á¬ááºáááºá áá áºá á¯á¶áá áºáá±á¬ááºá REAL ááẠá¡ááá¯ááºážááááºážáá»á¬ážááŒáá·áº ááá¯ážááœá¬ážá áœá¬ ááŒá¯áá°áááºááᯠáá»áœááºá¯ááºáááááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááẠááá¯áá±áá¬ááœáẠááááºážáá»á¬ážááᯠáá¯á¶ážááá·áºááá¯ááºáááºááŒá áºááŒá®ážá á¡áá¬á¡á¬ážáá¯á¶ážááẠáááºážááá¯á·ááŸáá·áº áá±áá»á¬áá±á«áẠá¡áááºááŒá±áááá·áºáááºááŒá áºááŒá±á¬ááºáž áá áºá á¯á¶áá áºáá±á¬ááºá ááŒá±á¬áááá·áºáááºá OKá áá¶áá«áẠ123 ááᯠREAL ááá¯á· áá»ááŒáá«á áá¯á·á
********* ÐÐÐÐ ÐС *********
SELECT 123456789::REAL::INT;
**************************
int4
-----------
123456792
(1 ÑÑÑПка)
ááŒá®ážáá±á¬á· áá±á¬ááºááẠ3 áᯠááŒá áºááœá¬ážáááºá áá«áá²á áá±áá¬áá±á·á áºá áá±ááœááºáááºážááᯠáá±á·ááœá¬ážáá«ááŒá®á áá«ááŸááá¯áẠáá«ááá¯á· áá áºáá¯áᯠáá¬ážáááºááŸá¯ááœá²áá±áá¬áá¬ážá á¡ááŒá±ááŸá¬ááŒáá·áºáá¡á±á¬ááºá
ááááŠážá áœá¬ áá á¹á ááºážááᯠááááááŒáá«á áá¯á·á áááºááááá·áºá¡ááá¯ááºáž áá¿áááááºážááᯠáá«áá«áááºáá¯á¡ááŒá Ạáá»á²á·ááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áº 123.456 ááẠ1*102 + 2*101 + 3*100 + 4*10-1 + 5*10-2 + ââ6*10-3 ááŸáá·áº áá®áá»áŸáá«áááºá ááá¯á·áá±á¬áº ááœááºáá»á°áá¬ááẠááááºážááááºážáá»á¬ážááŒáá·áº binary áá¯á¶á á¶ááŒáá·áº áá¯ááºáá±á¬ááºáá±á¬ááŒá±á¬áá·áº áááºážááá¯á·á¡á¬áž á áœááºážá¡á¬ážááŸá áºáá¯á áá»á²á·ááœááºááŸá¯áá¯á¶á á¶ááŒáá·áº ááá¯ááºá á¬ážááŒá¯ááááºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áºá ááœáááááºážááœáẠ5.625 ááᯠ101.101 á¡ááŒá Ạááá¯ááºá á¬ážááŒá¯ááŒá®áž 1*22 + 0*21 + 1*20 + 1*2-1 + 0*2-2 + 1*2-3 ááŸáá·áº áá®áá»áŸáá«áááºá á¡áááºá ááŸá áºáá¯á á¡ááŒá¯ááá±á¬áá±á¬ááºáá±á¬ áá«áá«áá»á¬ážááẠáá¿áááááºážáá»á¬áž (áá áá áá áá áá á áááº) ááᯠá¡ááŒá²áá±ážáááºááá¯áá«áá á¡ááŸá¯ááºááá¹ááá¬áá»á¬ážááŒáá·áº á¡áá¬á¡á¬ážáá¯á¶ážááẠááá¯ááá¯ááŸá¯ááºááœá±ážááẠ(1á 2á 4á 8 á áááº)á ááŒá¿áá¬á á¡á²áá« áá¿ááá áºáá¯á á®ááá¯ááºážááᯠááá·áºáááºááœáá¡ááá¯ááºážá¡á á¡ááŒá Ạááá¯ááºá á¬ážááŒá¯áááááá¯ááºáá«á. ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·á áá¬áááºááá¯ážááŒáá·áºáá»á±á¬áºááŒá¬ážáá±á¬ 0.1 ááẠááœáá¡ááá¯ááºážá¡á áá¯á¶á á¶ááŒáá·áº á¡áá»áááºá¡ááá¯ááºážá¡ááŒá¬ážáááºááá¯áž 0.0(0011) á¡ááŒá áºáá±á«áºáá¬áááºá ááá¯á·ááŒá±á¬áá·áºá ááœááºáá»á°áá¬ááŸááºáá¬ááºááŸá á€áá¶áá«ááºááá±á¬ááºáá¯á¶ážáááºááá¯ážááẠáá áºá¡ááááºá¡áááºáá±á«áº áá°áááºá ááœá²ááŒá¬ážáááá·áºáááºá
ááá¯á¡áá»áááºááẠááœááºáá»á°áá¬ááŸááºáá¬ááºááœáẠááááºážá¡á á áºá¡ááŸááºáá»á¬ážááᯠáááºáá²á·ááá¯á· ááááºážáááºážáá¬ážáááºááᯠááŸááºáá¬ážáááá·áºá¡áá»áááºááŒá áºáááºá áá±áá°áá»á¡á¬ážááŒáá·áºááŒá±á¬ááá»áŸááºá á¡á á áºá¡ááŸááºááááºážááááºážááœáẠááááááºááá¹ááá¬á mantissa ááŸáá·áº áááºááááºážáá¯á¶ážáá»áá¯ážáá«áááºáááºá ááááááºááẠá¡áá±á«ááºáž ááá¯á·ááá¯áẠá¡áá¯áẠááŒá áºááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áº áááºážá¡ááœáẠáá áºáá áºááᯠááœá²áá±áá±ážáááºá ááá¯á·áá±á¬áº mantissa á bits ááŸáá·áº exponent á¡áá±á¡ááœááºááᯠreal type ááŒáá·áºáá¯á¶ážááŒááºáááºá ááá¯á·ááŒá±á¬áá·áºá á¡á á áºá¡ááŸááºá¡áá»áá¯ážá¡á á¬ážá¡ááœááºá mantissa áá¡ááŸááºááŸá¬ 23 bits (1 ááŸáá·áºáá®áá»áŸáá±á¬ bit ááᯠmantissa áá¡á ááœáẠááœááºááá¯ááºá áœá¬ááá·áºáá¬ážááŒá®áž ááááºááŸá¬ 24) ááŒá áºááŒá®áž áááºááááºážááẠ8 bits ááŒá áºáááºá á á¯á á¯áá±á«ááºážááẠ32 bits ááá¯á·ááá¯áẠ4 bytes ááŒá áºáááºá ááŸá áºááááá»áá±á¬á¡áá»áá¯ážá¡á á¬ážá¡ááœááºá mantissa áá¡ááŸááºááẠ52 bits ááŒá áºáááºááŒá áºááŒá®áž áááºááááºážááẠ11 bits ááŒá áºáááºááŒá áºááŒá®áž á á¯á á¯áá±á«ááºáž 64 bits ááá¯á·ááá¯áẠ8 bytes ááŒá áºáááºá PostgreSQL ááẠFloating Point áá¶áá«ááºáá»á¬ážá¡ááœáẠááá¯ááá¯áááá»ááŸá¯ááᯠááá¶á·ááá¯ážáá«á
áá»áœááºá¯ááºááá¯á·á áá¿á áá¶áá«áẠ0.1 ááᯠá¡á á áºá¡ááŸááºááŸáá·áº ááŸá áºááááá»ááŸá¯ á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá¡ááŒá Ạáá¯ááºááá¯ážááŒáá«á áá¯á·á áááºááááºážáááááááºááá¹ááá¬ááŸáá·áºáááºááá¯ážááá¯á·ááẠáá°áá®áá±á¬ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠmantissa ááá¯á¡á¬áá¯á¶á áá¯ááºáá«ááẠ(áááºááááºážááááºááá¯ážáá»á¬ážááŸáá·áº áá¯áá¡á á áºá¡ááŸááºáááºááá¯ážáá»á¬ážááᯠááááºážáááºážááŒááºážááááºááá¯ážáá»á¬ážááᯠááááºááᬠáá»ááºááŸááºáá¬ážáá«áááºá áááºážááá¯á·ááẠáá¬ážáááºááŸá¯ááᯠááŸá¯ááºááœá±ážá á±ááŒá®áž á¡ááŸá áºáá¬áá០á¡á¬áá¯á¶ááœáŸá²ááœá¬ážáá±á¬ááŒá±á¬áá·áºá ááŒá¿áá¬ááᯠá áááºáááºá á¬ážáá«á IEEE 754 á á¶ááŸá¯ááºážááᯠááŒáá·áºáá«á) áá«ááá¯á·áá¬áááŸá¬áá²? á¡áá±á«áºáá¯á¶ážá á¬ááŒá±á¬ááºážááœáẠREAL á¡áá»áá¯ážá¡á á¬ážá¡ááœáẠ"mantissa" ááᯠáá±ážááẠ(áá±á¬ááºáá¯á¶ážáá áºá á¡áá®ážáá¯á¶ážááá¯ááºá á¬ážááŒá¯áá¶áá«ááºááá¯á· 1 ááŒáá·áº á¡ááá¯ááºážááŒááºážááᯠááá·áºááœááºážááœááºáá»ááºááŒááºážá ááá¯ááºáá«á 0.099999...) ááŸáá·áº á¡á±á¬ááºááŒá±ááá¯ááºážááœáẠ- for ááŸá áºááááá»ááŸá¯ á¡áá»áá¯ážá¡á á¬áž-
0.000110011001100110011001101
0.00011001100110011001100110011001100110011001100110011001
áááºááŸá¬ážáááºááŸá¬ á€ááááºážááŸá áºáá¯á¶ážááẠáá¯á¶ážáááœá²ááŒá¬ážáá«áááºá ááá¯á·ááŒá±á¬áá·áº ááŸáá¯ááºážááŸá¥áºáá±á¬á¡áá« ááááá¶áá«ááºááᯠáá¯áááŒáá·áº áá¯á¶ážá¡á¯ááºáá¬ážáááºááŒá áºááŒá®ážá ááá¯á·ááŒá±á¬áá·áºá áá¯áááááááºážááẠááŒá®ážááẠ(á¡ááá¯ááºážáá¯á¶ - á á¬áá¯á¶ážááŒá®ážááŒáá·áº á¡ááŸááºá¡áá¬ážááŒá¯áá¬ážáááº) ááᯠááá·áºááœááºážá ááºážá á¬ážáá«á áááºážá áá»áœááºá¯ááºááá¯á·á á¥ááá¬áá»á¬ážá០áááŸááºážáááºážááŸá¯ááᯠááŸááºážááŒáááºá áá¯áááá¥ááá¬ááœááºá ááŒááºáá¬ážá áœá¬áááºááŸááºáá¬ážáá±á¬áá¶áá«áẠ0.1 ááᯠDOUBLE PRECISION á¡áá»áá¯ážá¡á á¬ážááá¯á· áá¬á áºááá¯ááºááŒá®áž REAL á¡áá»áá¯ážá¡á á¬ážá á¡áá±á¡ááœááºááŸáá·áº ááŸáá¯ááºážááŸááºáá«áááºá ááŸá áºáá»áá¯ážáá¯á¶ážááᯠá¡áá»áá¯ážá¡á á¬ážáá°ááá¯á· áá»áŸá±á¬á·áá»áá¬ážááŒá®áž á¡áááºááœáẠááŒááºááœá±á·áááá·áº á¡ááá¡áá»ááŸááááºá á¡á¬ážáá¯á¶ážá¡áááºááŒá±á á±ááẠquery ááᯠááŒááºáááºááŒáá«á áá¯á·á
********* ÐÐÐÐ ÐС *********
SELECT 0.1::REAL > 0.1::DOUBLE PRECISION;
**************************
?column?
----------
t
(1 ÑÑÑПка)
á¡ááŸááºáááºá áá¶áá«áẠ0.1 ááᯠá¡á á áºá¡ááŸááºááŸáá·áº ááŸá áºááááá»ááŸá¯ááá¯á· ááŸá áºááá»áŸá±á¬á·áá»ááŒááºážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠááá±á áá¡ááœáẠá¡ááŒá±ááᯠáááŸááááº-
********* ÐÐÐÐ ÐС *********
SELECT 0.1::REAL::DOUBLE PRECISION;
**************************
float8
-------------------
0.100000001490116
(1 ÑÑÑПка)
áááºážááẠá¡áááºáá±á¬áºááŒáá« ááááá¥ááá¬ááá¯áááºáž ááŸááºážááŒáá¬ážáááºá áá¶áá«áẠ123 ááẠááá¯ážááŸááºážáá«áááºá mantissa ááᯠ24 bits áá²á· ááŸáááá¯á· áááŒá áºááá¯ááºáá«áá°ážá (áá ááŒááºáá¬áž + á á¡áááá¹áá¬ááºáááºáá±á¬ááºáááº)á 23 bits ááœáẠá¡á¶áááºááœááºáá»ááá¯ááºáá±á¬ á¡ááŒáá·áºáá¯á¶áž ááááºážááŒáá·áºááẠ1-24 = 224 ááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·á áá¶áá«áẠ1 ááᯠá¡áá®ážáá¯á¶áž ááá¯ááºá á¬ážááŒá¯ááá¯ááºáá±á¬ 16 ááá¯á· ááá¯ááºážáá¬ážáááºá á¡áá»áá¯ážá¡á á¬ážááᯠááŸá áºá ááŒáá¯áááºááŒááºáááºááŒááºážááŒáá·áºá áá»áœááºá¯ááºááá¯á· áááœá±á·ááá±á¬á·áá«á
********* ÐÐÐÐ ÐС *********
SELECT 123456789::DOUBLE PRECISION::INT;
**************************
int4
-----------
123456789
(1 ÑÑÑПка)
áá«áá«áá²á á¡á¶á·ááœááºá¡ááŸá¯áá»á¬áž áááŸááá±á¬á·áááºááᯠááœá±á·ááá«áááºá ááá¯á·áá±á¬áº áá±á¬áºááŒáá¬ážááá·áºá¡áá¬á¡á¬ážáá¯á¶ážááẠá¡á á áºá¡ááŸááºá¡áá»áá¯ážá¡á á¬ážááᯠáááºá¡ááŸááºááááºááá¯á¡ááºáááºááŸáá·áº áááºáááºá á ááºážá á¬ážááẠá¡ááŒá±á¬ááºážááŒáá»ááºáá±á¬ááºážáá áºáá¯ááŒá áºáááºá áááºážáá¡áá¯á¶ážááŒá¯ááŸá¯áá¡ááŒá®ážáá¬ážáá¯á¶ážá¡á¬ážáá¬áá»ááºááŸá¬ áááá»ááŸá¯áá»á±á¬ááºáá¯á¶ážááŒááºážááŸáá·áºá¡áá° ááœááºáá»ááºááŸá¯áá»á¬ážáá¡ááŒááºááŸá¯ááºážááŒá áºáá±á¬ááºážááŒá áºááá¯ááºáááºá ááá¯á·áá±á¬áº á€á¡áá»áá¯ážá¡á á¬ážááᯠáááŒá¬ááá¡áá¯á¶ážááŒá¯ááŒááºážááẠááá¬ážáá»áŸáá á±ááá·áº universal scenario ááŒá áºááá¬ážá ááááºáá«ááŸáá·áºá
source: www.habr.com