Podepsaná nula - Signed zero
Podepsaná nula je nula s přidruženým znaménkem . V běžné aritmetice číslo 0 nemá znaménko, takže −0, +0 a 0 jsou totožné. Při práci na počítači však některé číselné reprezentace umožňují existenci dvou nul, často označovaných −0 ( záporná nula ) a +0 ( kladná nula ), které jsou numerickými srovnávacími operacemi považovány za rovnocenné, ale s možným odlišným chováním v konkrétních operacích. K tomu dochází v reprezentaci znaménka a velikosti a doplňku podepsaných čísel pro celá čísla a ve většině reprezentací čísel s plovoucí desetinnou čárkou . Číslo 0 je obvykle kódováno jako +0, ale může být reprezentováno buď +0 nebo -0.
Standard IEEE 754 pro aritmetiku s pohyblivou řádovou čárkou (v současnosti používá většina počítačů a programovacích jazyků, které podporují čísla s plovoucí desetinnou čárkou) vyžaduje +0 i -0. Skutečnou aritmetiku s nulami se znaménkem lze považovat za variantu rozšířené řady reálných čísel tak, že 1/−0 = - ∞ a 1/ +0 = +∞; dělení je nedefinováno pouze pro ± 0/± 0 a ± ∞/± ∞.
Negativně podepsal nula odráží matematickou analýzu pojetí se blíží 0 zdola jako jednostranný limitem , který může být označené x → 0 - , x → 0-, nebo x → ↑ 0. Zápis „−0“ lze neformálně použít k označení záporného čísla, které bylo zaokrouhleno na nulu. Pojem záporná nula má také některé teoretické aplikace ve statistické mechanice a dalších oborech.
Tvrdí se, že zahrnutí podepsané nuly do IEEE 754 značně usnadňuje dosažení numerické přesnosti v některých kritických problémech, zejména při práci se složitými elementárními funkcemi. Na druhou stranu koncept nuly se znaménkem je v rozporu s obecným předpokladem ve většině matematických polí, že záporná nula je totéž co nula. Reprezentace, které umožňují zápornou nulu, mohou být zdrojem chyb v programech, pokud vývojáři softwaru neberou v úvahu, že i když se dvě nulové reprezentace chovají při numerickém srovnání stejně, v některých operacích poskytují různé výsledky.
Zastoupení
Široce používané kódování komplementu dvou neumožňuje zápornou nulu. V reprezentaci znaménka a velikosti 1+7 bitů pro celá čísla je záporná nula reprezentována bitovým řetězcem 1000 0000 . V 8bitové reprezentaci komplementu je záporná nula reprezentována bitovým řetězcem 1111 1111 . Ve všech třech kódováních je kladná nula reprezentována 0000 0000 . Jedná se však o neobvyklé formáty, nejběžnějšími formáty včetně záporné nuly jsou formáty IEEE 754 s plovoucí desetinnou čárkou, popsané níže.
V IEEE 754 čísel binární s plovoucí desetinnou čárkou, nulové hodnoty jsou reprezentovány předepjaté exponenty a mantisy obojí je nula. Záporná nula má znaménkový bit nastaven na jedničku. Jeden může získat zápornou nulu v důsledku určitých výpočtů, například jako výsledek aritmetického podtečení na záporném čísle −1.0×0.0
, nebo jednoduše jako −0.0
.
V IEEE 754 dekadickém kódování s plovoucí desetinnou čárkou je záporná nula reprezentována exponentem, který je jakýmkoli platným exponentem v rozsahu kódování, skutečný význam je nula a bit znaménka je jedna.
Vlastnosti a manipulace
Standard IEEE 754 s plovoucí desetinnou čárkou určuje chování kladné nuly a záporné nuly při různých operacích. Výsledek může záviset na aktuálním nastavení režimu zaokrouhlování IEEE .
Zápis
V systémech, které obsahují nuly se znaménkem i bez znaménka, se pro podepsané nuly někdy používá notace a .
Aritmetický
Sčítání a násobení jsou komutativní, ale je nutné dodržovat některá speciální pravidla, což znamená, že obvyklá matematická pravidla pro algebraické zjednodušení nemusí platit. Níže uvedený znak ukazuje získané výsledky s plovoucí desetinnou čárkou (není to obvyklý operátor rovnosti).
Při násobení nebo dělení se vždy dodržuje obvyklé pravidlo pro znaménka:
- (pro rozdíl od ± ∞)
- (pro rozdíl od 0)
Existují speciální pravidla pro sčítání nebo odčítání podepsané nuly:
- (pro rozdíl od 0)
- (pro jakékoli konečné , −0 při zaokrouhlování směrem k zápornému)
Kvůli záporné nule (a také když je režim zaokrouhlování směrem nahoru nebo dolů) nelze výrazy- ( x - y ) a ( -x )-(- y ) pro proměnné s plovoucí desetinnou čárkou x a y nahradit y - x . Nicméně (-0) + x může být nahrazeno X, se zaokrouhlením na nejbližší (s výjimkou, kdy x může být signalizační NaN ).
Některá další speciální pravidla:
- (dodržuje pravidlo rozdělení pro rozdělení)
- (pro nenulové se řídí znakovým pravidlem pro dělení)
- ( Není to číslo ani přerušení pro neurčitou formu )
Dělení nenulového čísla nulou nastaví příznak dělení nulou a operace produkující NaN nastaví příznak neplatné operace. Popisovač výjimky se nazývá-li povoleno pro odpovídající vlaječku.
Srovnání
Podle standardu IEEE 754 by záporná nula a kladná nula měly být srovnatelné s obvyklými (numerickými) srovnávacími operátory, jako jsou ==
operátory C a Java . V těchto jazycích mohou být k rozlišení těchto dvou hodnot zapotřebí speciální programovací triky:
- Zadejte přerušení čísla na celočíselný typ, abyste se podívali na znaménkový bit v bitovém vzoru;
- pomocí funkce ISO C
copysign()
(operace copySign IEEE 754) zkopírujte znaménko nuly na nenulové číslo; - pomocí
signbit()
makra ISO C (operace IEEE 754 isSignMinus), která vrací, zda je nastaven znakový bit čísla; - přičemž převrácenou hodnotu nuly získáte buď 1/( +0) = +∞ nebo 1/( - 0) = −∞ (pokud není dělení nulovou výjimkou zachyceno).
Poznámka: Casting na integrální typ nebude vždy fungovat, zvláště na doplňkových systémech dvou.
Některé programovací jazyky však mohou poskytovat alternativní operátory porovnání, které tyto dvě nuly odlišují. To je případ například metody equals ve Double
třídě Java wrapper.
V zaokrouhlených hodnotách, jako jsou teploty
Neformálně lze pro zápornou hodnotu, která byla zaokrouhlena na nulu, použít zápis „−0“. Tento zápis může být užitečný, pokud je záporné znaménko významné; například při tabulkování teplot Celsia , kde záporné znaménko znamená pod bodem mrazu .
Ve statistické mechanice
Ve statistické mechanice se někdy používá k popisu systémů s inverzí populace negativní teploty , o kterých lze uvažovat, že mají teplotu větší než kladné nekonečno, protože koeficient energie ve funkci distribuce populace je −1/teplota. V této souvislosti je teplota -0 (teoretická) teplota větší než jakákoli jiná negativní teplota, což odpovídá (teoretickému) maximálnímu myslitelnému rozsahu inverze populace, opačnému extrému až +0.
Viz také
Reference
- „Typy s plovoucí desetinnou čárkou“ . Specifikace jazyka MSDN C# . Citováno 15. října 2005 .
- „Provozovatel divize“ . Specifikace jazyka MSDN C# . Citováno 15. října 2005 .
-
Thomas Wang (březen 2000). „Složitosti čísla s plovoucí desetinnou čárkou“ . Září 2000. Archivováno od originálu 2005-09-21. Citační deník vyžaduje
|journal=
( nápověda ) - Mike Colishaw (28. července 2008). „Desetinná aritmetická specifikace, verze 1.68“ . Citováno 2008-08-14 .-specifikace s desetinnou čárkou s plovoucí desetinnou čárkou, která obsahuje zápornou nulu
Další čtení
-
Michael Ingrassia. „Fortran 95 SIGN Change“ . Sun Developer Network . Citováno 15. října 2005 . - změny ve funkci Fortran
SIGN
ve Fortranu 95, aby vyhovovaly záporné nule - „Datové typy JScript“ . MSDN JScript . Citováno 16. října 2005 . -Typ JScript s plovoucí desetinnou čárkou s negativní nulou podle definice
- Venners, Bill (1. října 1996). „Aritmetika s plovoucí desetinnou čárkou“ . Naučte se Javu. JavaWorld . Pod kapotou . Citováno 2020-07-14 . - zastoupení záporné nuly ve virtuálním stroji Java
- Bruce Dawson (25. února 2012). „Srovnání čísel s plovoucí desetinnou čárkou, vydání 2012“ . -jak zacházet se zápornou nulou při porovnávání čísel s plovoucí desetinnou čárkou
- John Walker . „Mínus nula“ . Vzpomínky UNIVAC . Citováno 17. října 2005 . - čísla doplňků na počítačích řady UNIVAC 1100