Profruit banner

Умен звънец в openHAB

16 декември 2023

Телефонът е винаги с мен и сега, където и да се намирам получавам известие от openHAB, че някой е позвънил и чака пред вратата. А ако ме няма вкъщи става ясно часа и датата на последното позвъняване.

Tasmota Multipress

30 септември 2023

Идеята е Sonoff Touch T1 US 2 в салона, да управлява освен своето осветление и това в кухнята, а още вентилатора.

DIY 12V 1A WiFi Router UPS

22 април 2023

При поредно прекъсване на захранването вкъщи, батерията на нoтбука и двата UPS автоматично превключват на аварийно захранване и едновременно полита съобщение за конфуза

Zigbee2MQTT клониране

21 януари 2023

... как да клонираме съществуваща настройка на Zigbee2MQTT без да се налага последвало интервю на zigbee-устройствата.

LD2410 - бюджетен датчик присъствие в openHAB

11 февруари 2023

Цената на HLK-LD2410 зададе име на поредната тема в моя блог. С негова помощ се постига "народен" датчик присъствие в домашната автоматизация. . ...


Ако ви е осенила идея, да напишете криминален роман, но не знаете как да започнете останете тук. Прочетете до края и усвоеното може да ви послужи за джокер. Например, така. Името ми е Виктор. Аз съм микрохирург. Живея в Страната на чудесата на адрес ул. "Енисейская" дом 24. Съдбата ме срещна с човек, което ме направи слушател на Института по ориенталистика към Академията на науките на Узбекистан. Това ме завъртя на 180' и аз избрах синьото хапче ... и в този дух до края.

Следните математически примери ще бъдат главни герои на деня. Условно ги групирам по двойки.

0.6 - 0.5 = 0.1
0.5 - 0.4 = 0.1

0.3 - 0.2 = 0.1
0.2 - 0.1 = 0.1

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

Апроксимация в (My)SQL

Пример 1

set @a = 0.6-0.5, @b = 0.5-0.4;
SELECT @a AS a, @b AS b;
SELECT IF(@a=@b,'TRUE','FALSE') AS result;
резултат

Апроксимация в (My)SQL

Пример 2

set @a = 0.3-0.2, @b = 0.2-0.1;
SELECT @a AS a, @b AS b;
SELECT IF(@a=@b,'TRUE','FALSE') AS result;
резултат

Апроксимация в (My)SQL

И в двата случая MySQL върна TRUE. Както се казва - честито, булката е честна!

Апроксимация в PHP

Я да види дядо поп има ли в гърнето боб?

Пример 1

<?php
 $a = 0.6-0.5;
 $b = 0.5-0.4;
 
 //echo "\$a = $a \$b = $b";
 
 var_dump($a===$b);
резултат

Апроксимация в PHP

Добре, много добре ... отлично!

Пример 2

<?php
 $a = 0.3-0.2;
 $b = 0.2-0.1;
 
 //echo "\$a = $a \$b = $b";
 
 var_dump($a===$b);
резултат

Апроксимация в PHP

А, шах с пешката! Що така бе Миме?

Апроксимация в JavaScript

Как стоят нещата в този език?

Пример 1

<script type="text/javascript">
 var a;
 a = 0.6-0.5;
   
 var b;
 b = 0.5-0.4;

 (a===b)? document.write("TRUE") : document.write("FALSE")
</script>
резултат

Апроксимация в JavaScript

ОК, всичко е под контрол ...

Пример 2

<script type="text/javascript">
 var a;
 a = 0.3-0.2;
   
 var b;
 b = 0.2-0.1;

 (a===b)? document.write("TRUE") : document.write("FALSE")
</script>
резултат

Апроксимация в JavaScript

Бля! К'во става тука!?

Епилог

Апроксимация произхожда от латинската дума "approximo" и се превежда като приближение. В математиката означава замяна на сложни обекти с по-прости или с по-сходни към изходните. В примерите използвах естествени числа, чието представление разглежда стандарт IEEE-754, определящ двоичния им формат. За съжаление, формата на двоичното представление на реалните числа е ограничен, което позволява точно да изрази ограничено количество. Следва да се очаква, че представлението за останалите ще се явява някакво закръгление и ще породи проблеми подобни на резултат FALSE, където заради погрешност при окръгляване разликата между числа 0.3 и 0.2 не е равна на разликата между числа 0.2 и 0.1. И няма промяна ако оператор еквивалентност/идентичност (===) се промени на оператор равенство (==). По-важно е да се разбере, че този проблем не е нещо характерно за PHP или JavaScript, споделят го и други езици. Точността на окръгляване е напълно приемлива за голям брой случаи, но следва да се има едно на ум при опити за проверка на значенията на равенство.






до нови срещи   ^.^
11.05.2013 profruit 

|

0 Response to "Апроксимация в уеб-програмирането"

Публикуване на коментар

Този блог е реинкарнация на първите ми опити за споделяне в нета. На времето започнах с къси разкази на преживяното. После се обезсмисли и превърнах блога си в системно радио. Пиша единствено неща, които карат душата ми да живее: openHAB, Ubuntu, Споделено и т.н. Това е моето системно радио, разбирате ли? Моята вълна и вие сте на нея сега.

Архив на блога