Trochu rozptýlení do plovoucí bod (ne) přesnost, část 1

hlasů
16

Většina matematiků se dohodly, že:

e mají hodnotu + 1 = 0

Nicméně, většina implementací nesouhlasí s pohyblivou řádovou čárkou. Jak dobře můžeme urovnat tento spor?

Jsem ráda, kdo se dozví o různých jazycích a implementacích a různé způsoby, jak vydělat výsledek co nejblíže k nule, jak je to možné. Být kreativní!

Položena 04/08/2008 v 07:21
zdroj uživatelem
V jiných jazycích...                            


10 odpovědí

hlasů
16

Není to tak, že většina implementací nesouhlasí s plovoucí desetinnou čárkou, je to jen, že se nemohou dostat na přesnost potřebné k získání 100% odpověď na. A správná odpověď je, že to není možné.

PI je nekonečná řada číslic, které nikdo nebyl schopen naznačovat ničím jiným než symbolická reprezentace a e ^ X je stejný, a tak jediný způsob, jak se dostat na 100% přesnost je jít symbolické.

Odpovězeno 26/12/2008 v 21:22
zdroj uživatelem

hlasů
8

Zde je krátký seznam implementací a jazyků jsem se snažil. Je řazeny dle blízkostí k nule:

  • Systém: (+ 1 (make-polar 1 (atan 0 -1)))
    • 0.0+1.2246063538223773e-16i(Chez schéma, MPO schéma)
    • 0.0+1.22460635382238e-16i(Guile)
    • 0.0+1.22464679914735e-16i(kuře s numbersvejcem)
    • 0.0+1.2246467991473532e-16i(MzScheme, SISC, Gauche, Gambit)
    • 0.0+1.2246467991473533e-16i(SCM)
  • Common Lisp: (1+ (exp (complex 0 pi)))
    • #C(0.0L0 -5.0165576136843360246L-20)(CLISP)
    • #C(0.0d0 1.2246063538223773d-16)(CMUCL)
    • #C(0.0d0 1.2246467991473532d-16)(SBCL)
  • Perl: use Math::Complex; Math::Complex->emake(1, pi) + 1
    • 1.22464679914735e-16i
  • Krajta: from cmath import exp, pi; exp(complex(0, pi)) + 1
    • 1.2246467991473532e-16j(CPython)
  • Rubín: require 'complex'; Complex::polar(1, Math::PI) + 1
    • Complex(0.0, 1.22464679914735e-16)(MRI)
    • Complex(0.0, 1.2246467991473532e-16)(JRuby)
  • R: complex(argument = pi) + 1
    • 0+1.224606353822377e-16i
Odpovězeno 04/08/2008 v 07:22
zdroj uživatelem

hlasů
5

Je to možné urovnat tento spor?

Moje první myšlenka je podívat se do symbolického jazyka, jako je javor . Nemyslím si, že se počítá jako plovoucí desetinnou čárkou ačkoli.

Ve skutečnosti, jak se dá reprezentovat i (nebo j pro inženýry) v konvenční programovací jazyk?

Možná lepší příklad je sin (π) = 0? (Nebo se opět minul I bod?)

Odpovězeno 04/08/2008 v 07:29
zdroj uživatelem

hlasů
4

Vaše otázka se zdá trochu zvláštní pro mě, protože se zdá, že se o tom, že matematický Floating Point je realizován pomocí jazyka. To je obecně není pravda, protože FP math se provádí pomocí plovoucí čárkou procesor hardware. Ale software nebo hardware, plovoucí desetinnou čárkou bude vždy nepřesné. To je jen, jak plave práci.

Pokud potřebujete větší přesnost je třeba použít jinou číselnou reprezentaci. Stejně jako v případě, děláte matematické celé číslo z čísel, které se nevejdou do int nebo dlouhý. Některé jazyky mají knihovny pro které postaven v roce (já vím, java má BigInteger a BigDecimal), ale budete muset explicitně pomocí těchto knihoven namísto původních typů, a výkon by byl (někdy výrazně) horší, než kdybyste použili plováky.

Odpovězeno 25/08/2008 v 14:37
zdroj uživatelem

hlasů
4

@Ryan Fox

Ve skutečnosti, jak se dá reprezentovat I (nebo j pro inženýry) v konvenční programovací jazyk?

Nativní komplexní datové typy nejsou ani zdaleka neznámé. Fortran měl ji v polovině šedesátých let, a OP vykazuje celou řadu dalších jazyků, které je podporují v hist následku.

A komplexní čísla mohou být přidány do jiných jazyků jako knihovny (s operátorem přetížení dokonce vypadají jako nativní typů v kódu).

Ale pokud poskytují zvláštní případ tohoto problému je „non-smlouva“ je jen výrazem nepřesného stroje aritmetiky, ne? Je to jako si stěžují, že

float r = 2/3;
float s = 3*r;
float t = s - 2;

končí s (t! = 0) (Alespoň pokud používáte dost hloupé kompilátor) ...

Odpovězeno 25/08/2008 v 14:29
zdroj uživatelem

hlasů
4

Souhlasím s Ryanem, budete muset přesunout do jiné číslo reprezentace systému. Řešením je mimo sféru plovoucí čárkou, protože je třeba, aby pi reprezentován jako nekonečně dlouhého desetinná takže každá omezená přesnost režim prostě se nebude pracovat (alespoň ne bez použití nějaké čokoládová faktoru dohnat ztracené přesnost).

Odpovězeno 25/08/2008 v 02:10
zdroj uživatelem

hlasů
2

Měl jsem looooong kávy chatech s můj nejlepší kamarád mluví o iracionálních čísel a diference mezi jinými čísly. No, oba se shodují v tomto jiného úhlu pohledu:

Iracionální čísla jsou vztahy, jako funkce, a to způsobem, jakým způsobem? No, myslím, že o „pokud chcete dokonalý kruh, dej mi perfektní pi“, ale kruhy diferent s ostatními postavami (4 strany, 5, 6 ... 100, 200), ale ... kolik dalších stran učinit máte, spíš kruh to vypadat. Pokud jste za mnou tak daleko, spojující všechny tyto myšlenky zde je pi vzorec: zadejte popis obrázku zde

Tak, pi je funkce, ale ten, který nikdy nekončí! vzhledem k parametru ∞, ale rád bych si myslel, že můžete mít „instance“ pí, pokud změníte parametr ∞ pro velmi velké Int, budete mít velmi velký pi instanci.

Stejné je to s e, dej mi obrovskou parametr, dám vám obrovskou e.

Uvedení všechny nápady dohromady:

Protože máme omezené kapacitě paměti, jazyka a libs poskytuje nám obrovskou instance iracionálních čísel, v tomto případě, pí ae jako konečný výsledek, budete mít dlouhou Aproach získat 0, stejně jako příklady, které poskytl @Chris Jester-Young

Odpovězeno 06/05/2017 v 03:07
zdroj uživatelem

hlasů
2

Je to omezení našich současných pohyblivé řádové čárce výpočetních architektur. Plovoucí řádovou čárkou je pouze přibližný číselných pólů jako e nebo PI (nebo něco za přesnost své kousky povolit). Opravdu se mi líbí tato čísla, protože se vzpírají klasifikaci, a zdá se, mít větší entropii (?) Než i prvočísel, které jsou kanonické série. Poměr vzdorovat své číselné vyjádření, někdy jednoduché věci, jako že může foukat mysli člověka (I love it).

Naštěstí celý jazyky a knihovny mohou být věnována přesné trigonometrických funkcí pomocí zápisu, pojmy (podobné těm, které popsal Lasse V. Karlsen ).

Vezměme si knihovna / jazyk, který popisuje pojmy jako e a pí ve formě, která stroj může pochopit. Má stroj žádnou představu o tom, co dokonalý kruh je? Pravděpodobně ne, ale můžeme vytvořit objekt - kruh, který splňuje všechny známé funkce přisuzujeme ní (konstantní poloměr, vztah poloměru k obvodu je 2 * pi * r = C). Objekt jako pí je popsán pouze pomocí výše uvedeného poměru. r & C mohou být číselné objekty popsal, co přesnost budete chtít dát. e lze definovat „jako e je jedinečné reálné číslo takové, že hodnota derivátu (sklon tečny) funkce f (x) = ze v místě x = 0 je přesně 1“ z wikipedie .

Fun otázka.

Odpovězeno 20/11/2009 v 21:37
zdroj uživatelem

hlasů
2

Numerická analýza nás učí, že se nemůžete spoléhat na přesné hodnotě malým rozdílům mezi velkými čísly.

To není jen vliv na rovnici v otázce zde, ale může přinést nestabilitu na všechno od řešení pro přiblížení jedinečnou sadu simultánních rovnic, přes nalezení nul polynomů, aby vyhodnocování log (~ 1) nebo exp (~ 0) ( dokonce jsem viděl speciální funkce pro vyhodnocování log (x + 1) a (exp (x) -1) se obejít toto).

Chtěl bych vás povzbudit, abyste si, že pokud jde o vynulování rozdíl - nelze - ale spíše v tom přidružené výpočty takovým způsobem, aby byl zajištěn minimální chybu.

Je mi líto, že je to 43 let, co jsem měl to bubnoval do mě na uni, ai když bych mohl vzpomenout odkazy, jsem si jistý, že je to lepší věci kolem nyní. Navrhuji toto jako výchozí bod.


Pokud to zní trochu povýšeně, omlouvám se. My „Numerická analýza 101“ Byl součástí mého chemie samozřejmě, protože tam nebylo moc CS v těchto dnech. Já opravdu nemám cit pro místo / významu numerická analýza má v moderním CS kurzu.

Odpovězeno 26/12/2008 v 22:22
zdroj uživatelem

hlasů
2

Ve skutečnosti, jak se dá reprezentovat I (nebo j pro inženýry) v konvenční programovací jazyk?

V jazyce, který nemá nativní reprezentace, se obvykle přidává pomocí OOP vytvořit Complextřídu reprezentovat ia js provozovatelem přetížení, aby správně vypořádat s operací zahrnujících jiná Complexčísla a nebo případně jiné číslo primitiv nativní k jazyku.

Např: Complex.java , C ++ <komplex>

Odpovězeno 25/08/2008 v 14:48
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more