{"id":88581,"date":"2020-07-15T01:42:09","date_gmt":"2020-07-14T23:42:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/unreal-features-of-real-types-ili-budte-ostorozhny-s-real"},"modified":"2020-07-15T01:42:09","modified_gmt":"2020-07-14T23:42:09","slug":"unreal-features-of-real-types-ili-budte-ostorozhny-s-real","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/unreal-features-of-real-types-ili-budte-ostorozhny-s-real","title":{"rendered":"Caratteristiche incredibili dei tipi reali, o Fate attenzione a REAL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dopo la pubblicazione <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/508038\/\">articolo<\/a><\/noindex> sulle peculiarit\u00e0 della tipizzazione in PostgreSQL, il primo commento riguardava le difficolt\u00e0 nel lavorare con i numeri in virgola mobile. Ho deciso di dare una rapida occhiatina al codice delle query SQL a mia disposizione per vedere quanto spesso viene utilizzato il tipo REAL. Sorprendentemente, \u00e8 stato usato abbastanza frequentemente e non sempre gli sviluppatori comprendono i pericoli ad esso associati. Questo nonostante il fatto che in rete e su Habra ci siano molte buone risorse sulle peculiarit\u00e0 della memorizzazione dei numeri in virgola mobile in memoria e sul loro utilizzo. Pertanto, in questo articolo cercher\u00f2 di applicare tali peculiarit\u00e0 a PostgreSQL e prover\u00f2 a esaminare, in modo semplice, le problematiche connesse, in modo che gli sviluppatori di query SQL possano evitarle pi\u00f9 facilmente.<\/p>\n<p><\/p>\n<p>La documentazione di PostgreSQL contiene una sintetica frase: \"La gestione di tali errori e la loro propagazione durante i calcoli \u00e8 oggetto di studio di un intero ramo della matematica e dell'informatica, e non verr\u00e0 trattato qui\" (rimandando saggiamente il lettore allo standard IEEE 754). A quali errori si fa riferimento qui? Discutiamoli uno per uno, e diventer\u00e0 chiaro perch\u00e9 ho ripreso in mano la penna.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Prendiamo, ad esempio, una semplice query:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">********* QUERY *********\nSELECT 0.1::REAL;\n**************************\nfloat4\n--------\n    0.1\n(1 riga)\n<\/code><\/pre>\n<p><\/p>\n<p>In questo caso non vedremo nulla di speciale \u2013 otterremo il previsto 0.1. Ma ora confrontiamolo con 0.1:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">********* QUERY *********\nSELECT 0.1::REAL = 0.1;\n**************************\n?colonna?\n----------\nf\n(1 riga)\n<\/code><\/pre>\n<p><\/p>\n<p>\u041d\u0435 \u0440\u0430\u0432\u043d\u044b! \u0427\u0442\u043e \u0437\u0430 \u0447\u0443\u0434\u0435\u0441\u0430! \u041d\u043e \u0434\u0430\u043b\u044c\u0448\u0435-\u0431\u043e\u043b\u044c\u0448\u0435. \u041a\u0442\u043e-\u0442\u043e \u0441\u043a\u0430\u0436\u0435\u0442, \u043c\u043e\u043b, \u044f \u0437\u043d\u0430\u044e, \u0447\u0442\u043e REAL \u043f\u043b\u043e\u0445\u043e \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u0441 \u0434\u0440\u043e\u0431\u044f\u043c\u0438, \u043d\u0443 \u0442\u0430\u043a \u044f \u0431\u0443\u0434\u0443 \u0442\u0443\u0434\u0430 \u0437\u0430\u043d\u043e\u0441\u0438\u0442\u044c \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0441 \u043d\u0438\u043c\u0438-\u0442\u043e \u0442\u043e\u0447\u043d\u043e \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e. \u041e\u043a, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u0447\u0438\u0441\u043b\u043e 123&nbsp;456&nbsp;789 \u043a \u0442\u0438\u043f\u0443 REAL:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">********* QUERY *********\nSELECT 123456789::REAL::INT;\n**************************\n   int4   \n-----------\n123456792\n(1 riga)\n<\/code><\/pre>\n<p><\/p>\n<p>\u00c8 venuto maggiore di 3! La base ha definitivamente dimenticato come contare! O forse non stiamo comprendendo qualcosa? Analizziamo.<\/p>\n<p><\/p>\n<p>Iniziamo con un ripasso della teoria. Come \u00e8 noto, qualsiasi numero decimale pu\u00f2 essere scomposto in potenze di dieci. Cos\u00ec, il numero 123.456 sar\u00e0 uguale a 1*10\u00b2 + 2*10\u00b9 + 3*10\u2070 + 4*10\u207b\u00b9 + 5*10\u207b\u00b2 + 6*10\u207b\u00b3. Ma un computer opera con i numeri in formato binario, quindi \u00e8 necessario rappresentarli come scomposizioni in potenze di due. Pertanto, il numero 5.625 in binario si presenta come 101.101 e sar\u00e0 uguale a 1*2\u00b2 + 0*2\u00b9 + 1*2\u2070 + 1*2\u207b\u00b9 + 0*2\u207b\u00b2 + 1*2\u207b\u00b3. E se le potenze positive di due danno sempre numeri decimali interi (1, 2, 4, 8, 16, ecc.), con le potenze negative la situazione \u00e8 pi\u00f9 complessa (0,5, 0,25, 0,125, 0,0625, ecc.). Il problema \u00e8 che <b>non ogni frazione decimale pu\u00f2 essere rappresentata come una frazione binaria finita<\/b>. Cos\u00ec, il nostro famigerato 0.1 in forma frazionaria binaria si presenta come un valore periodico 0.0(0011). Pertanto, il valore finale di questo numero nella memoria della macchina varier\u00e0 a seconda della sua precisione.<\/p>\n<p><\/p>\n<p>\u00c8 ora di ricordare come i numeri in virgola mobile vengono memorizzati nella memoria del computer. In generale, un numero in virgola mobile \u00e8 composto da tre parti principali: segno, mantissa ed esponente. Il segno pu\u00f2 essere positivo o negativo, quindi viene riservato un bit per questo. La quantit\u00e0 di bit per la mantissa e l'esponente \u00e8 determinata dal tipo di dato. Ad esempio, per il tipo REAL la lunghezza della mantissa \u00e8 di 23 bit (e un bit, pari a 1, viene implicitamente aggiunto all'inizio della mantissa, per un totale di 24), e l'esponente \u00e8 di 8 bit. In totale fanno 32 bit, ovvero 4 byte. Per il tipo DOUBLE PRECISION, la lunghezza della mantissa sar\u00e0 di 52 bit e l'esponente di 11 bit, per un totale di 64 bit, ovvero 8 byte. PostgreSQL non supporta una precisione maggiore per i numeri in virgola mobile.<\/p>\n<p><\/p>\n<p>Imballiamo il nostro numero 0.1 in forma decimale in entrambi i tipi \u2013 REAL e DOUBLE PRECISION. Poich\u00e9 il segno e il valore dell'esponente coincidono, concentriamoci sulla mantissa (sto intenzionalmente tralasciando le caratteristiche non ovvie del salvataggio dei valori esponenziali e dei valori reali nulli, poich\u00e9 complicano la comprensione e distraggono dal nocciolo della questione. Se sei interessato, consulta lo standard IEEE 754). Cosa otteniamo? Nella parte superiore fornir\u00f2 la \"mantissa\" per il tipo REAL (considerando l'arrotondamento dell'ultimo bit a 1 al numero rappresentabile pi\u00f9 vicino, altrimenti otteniamo 0.099999\u2026), e nella parte inferiore per il tipo DOUBLE PRECISION:<\/p>\n<p><\/p>\n<blockquote><p><b>0.0001<\/b>1001100110011001100110<b>1<\/b><br \/>\n<b>0.0001<\/b>1001100110011001100110011001100110011001100110011001\n<\/p><\/blockquote>\n<p><\/p>\n<p>\u00c8 chiaro che si tratta di due numeri totalmente diversi! Pertanto, nella comparazione, il primo numero sar\u00e0 completato con zeri e, di conseguenza, risulter\u00e0 maggiore del secondo (considerando l'arrotondamento \u2013 come indicato in grassetto dalla singola unit\u00e0). Questo spiega anche l'ambiguit\u00e0 nei nostri esempi. Nel secondo esempio, il numero 0.1 specificato viene convertito in tipo DOUBLE PRECISION, dopo di che viene confrontato con un numero di tipo REAL. Entrambi vengono convertiti nello stesso tipo, e abbiamo esattamente ci\u00f2 che vediamo sopra. Modifichiamo la query affinch\u00e9 tutto torni al suo posto:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">********* RICHIESTA *********\nSELECT 0.1::REAL &gt; 0.1::DOUBLE PRECISION;\n**************************\n?column?\n----------\nt\n(1 riga)\n<\/code><\/pre>\n<p><\/p>\n<p>Infatti, eseguendo il casting del numero 0.1 a REAL e DOUBLE PRECISION otteniamo la risposta al mistero:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">********* RICHIESTA *********\nSELECT 0.1::REAL::DOUBLE PRECISION;\n**************************\n\n      float8       \n-------------------\n0.100000001490116\n(1 riga)\n<\/code><\/pre>\n<p><\/p>\n<p>\u042d\u0442\u0438\u043c \u0436\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435. \u0427\u0438\u0441\u043b\u043e 123&nbsp;456&nbsp;789 \u043f\u0440\u043e\u0441\u0442\u043e <b>non pu\u00f2 essere rappresentato in 24 bit di mantissa<\/b> (23 \u044f\u0432\u043d\u044b\u0445 + 1 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u043c\u044b\u0439). \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 24 \u0431\u0438\u0442\u0430, \u0431\u0443\u0434\u0435\u0442 224-1 = 16&nbsp;777&nbsp;215. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0448\u0435 \u0447\u0438\u0441\u043b\u043e 123&nbsp;456&nbsp;789 \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c\u043e\u0433\u043e 123&nbsp;456&nbsp;792. \u0421\u043c\u0435\u043d\u0438\u0432 \u0442\u0438\u043f \u043d\u0430 DOUBLE PRECISION, \u043c\u044b \u0443\u0436\u0435 \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u043c \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">********* RICHIESTA *********\nSELECT 123456789::DOUBLE PRECISION::INT;\n**************************\n   int4   \n-----------\n123456789\n(1 riga)\n<\/code><\/pre>\n<p><\/p>\n<p>Ecco tutto. Non ci sono stati miracoli. Ma tutto ci\u00f2 descritto \u00e8 un buon motivo per riflettere su quanto davvero abbiate bisogno del tipo REAL. Forse, il maggior vantaggio del suo utilizzo \u00e8 la velocit\u00e0 di calcolo, con una perdita di precisione predefinita. Ma sar\u00e0 questo uno scenario universale che giustifica un uso cos\u00ec frequente di questo tipo? Non lo credo.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/508350\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 PostgreSQL, \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0431\u044b\u043b \u043f\u0440\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u042f \u0440\u0435\u0448\u0438\u043b \u0431\u0435\u0433\u043b\u043e \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u043e\u0434\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043c\u043d\u0435 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u043e \u0432 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f REAL. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0437\u0430 \u043d\u0438\u043c. \u0418 \u044d\u0442\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-88581","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 PostgreSQL, \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0431\u044b\u043b \u043f\u0440\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u042f \u0440\u0435\u0448\u0438\u043b \u0431\u0435\u0433\u043b\u043e \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u043e\u0434\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043c\u043d\u0435 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u043e \u0432 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f REAL. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0437\u0430 \u043d\u0438\u043c. \u0418 \u044d\u0442\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e,\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/unreal-features-of-real-types-ili-budte-ostorozhny-s-real\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Unreal Features of Real Types, \u0438\u043b\u0438 \u0411\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b \u0441 REAL | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 PostgreSQL, \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0431\u044b\u043b \u043f\u0440\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u042f \u0440\u0435\u0448\u0438\u043b \u0431\u0435\u0433\u043b\u043e \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u043e\u0434\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043c\u043d\u0435 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u043e \u0432 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f REAL. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0437\u0430 \u043d\u0438\u043c. \u0418 \u044d\u0442\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e,\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/unreal-features-of-real-types-ili-budte-ostorozhny-s-real\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-14T23:42:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-14T23:42:09+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Caratteristiche sorprendenti dei tipi reali, o Fai attenzione a REAL | ProHoster","description":"Dopo la pubblicazione dell'articolo sulle peculiarit\u00e0 dei tipi in PostgreSQL, il primo commento riguardava le difficolt\u00e0 nel lavorare con i numeri reali. Ho deciso di dare un'occhiata rapida al codice delle query SQL a mia disposizione per vedere quanto spesso viene utilizzato il tipo REAL. Come si \u00e8 rivelato, viene utilizzato piuttosto frequentemente, e non sempre gli sviluppatori comprendono i pericoli che ne derivano. E questo nonostante il fatto che,","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/unreal-features-of-real-types-ili-budte-ostorozhny-s-real","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Unreal Features of Real Types, \u0438\u043b\u0438 \u0411\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b \u0441 REAL | ProHoster","og:description":"\u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 PostgreSQL, \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0431\u044b\u043b \u043f\u0440\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u042f \u0440\u0435\u0448\u0438\u043b \u0431\u0435\u0433\u043b\u043e \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u043e\u0434\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043c\u043d\u0435 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u043e \u0432 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f REAL. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0437\u0430 \u043d\u0438\u043c. \u0418 \u044d\u0442\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e,","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/unreal-features-of-real-types-ili-budte-ostorozhny-s-real","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-14T23:42:09+00:00","article:modified_time":"2020-07-14T23:42:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"88581","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:10:53","updated":"2022-10-03 00:47:31"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/88581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=88581"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/88581\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=88581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=88581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=88581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}