23 Stimmen

Welche Programmiersprachen unterstützen Arithmetik mit beliebiger Genauigkeit?

Welche Programmiersprachen unterstützen Arithmetik mit beliebiger Genauigkeit und können Sie ein kurzes Beispiel dafür geben, wie man eine beliebige Anzahl von Ziffern ausgibt?

1voto

jmorika Punkte 11

Das (kostenlose) Basisprogramm x11 basic ( http://x11-basic.sourceforge.net/ ) hat eine beliebige Genauigkeit für ganze Zahlen. (und auch einige nützliche Befehle, z.B. nextprime( abcd...pqrs))

1voto

Steve P Bolton Punkte 131

IBMs interpretierte Skriptsprache Rexx bietet benutzerdefinierte Präzisionseinstellungen mit Numeric. https://www.ibm.com/docs/en/zos/2.1.0?topic=instructions-numeric . Die Sprache läuft auf Großrechnern und PC-Betriebssystemen und verfügt über ein sehr leistungsfähiges Parsing und Variablenhandling sowie über Erweiterungspakete. Object Rexx ist die neueste Implementierung. Links von https://en.wikipedia.org/wiki/Rexx

0voto

jbyler Punkte 6558

Haskell verfügt über eine hervorragende Unterstützung für die Arithmetik mit beliebiger Genauigkeit, und die Verwendung ist das Standardverhalten. In der REPL, ohne Importe oder Einrichtung erforderlich:

Prelude> 2 ^ 2 ^ 12
1044388881413152506691752710716624382579964249047383780384233483283953907971557456848826811934997558340890106714439262837987573438185793607263236087851365277945956976543709998340361590134383718314428070011855946226376318839397712745672334684344586617496807908705803704071284048740118609114467977783598029006686938976881787785946905630190260940599579453432823469303026696443059025015972399867714215541693835559885291486318237914434496734087811872639496475100189041349008417061675093668333850551032972088269550769983616369411933015213796825837188091833656751221318492846368125550225998300412344784862595674492194617023806505913245610825731835380087608622102834270197698202313169017678006675195485079921636419370285375124784014907159135459982790513399611551794271106831134090584272884279791554849782954323534517065223269061394905987693002122963395687782878948440616007412945674919823050571642377154816321380631045902916136926708342856440730447899971901781465763473223850267253059899795996090799469201774624817718449867455659250178329070473119433165550807568221846571746373296884912819520317457002440926616910874148385078411929804522981857338977648103126085903001302413467189726673216491511131602920781738033436090243804708340403154190336

(Probieren Sie es selbst aus unter https://tryhaskell.org/ )

Wenn Sie Code schreiben, der in einer Datei gespeichert ist, und Sie wollen drucken eine Zahl, müssen Sie sie zunächst in eine Zeichenkette umwandeln. Die show Funktion tut dies.

module Test where

main = do
  let x = 2 ^ 2 ^ 12
  let xStr = show x
  putStrLn xStr

(Probieren Sie es selbst aus bei code.world: https://www.code.world/haskell#Pb_gPCQuqY7r77v1IHH_vWg )

Darüber hinaus ist Haskells Num Abstraktion können Sie die Entscheidung über den zu verwendenden Typ so lange wie möglich aufschieben.

-- Define a function to make big numbers.  The (inferred) type is generic.
Prelude> superbig n = 2 ^ 2 ^ n

-- We can call this function with different concrete types and get different results.
Prelude> superbig 5 :: Int
4294967296
Prelude> superbig 5 :: Float
4.2949673e9

-- The `Int` type is not arbitrary precision, and we might overflow.
Prelude> superbig 6 :: Int
0

-- `Double` can hold bigger numbers.
Prelude> superbig 6 :: Double
1.8446744073709552e19
Prelude> superbig 9 :: Double
1.3407807929942597e154

-- But it is also not arbitrary precision, and can still overflow.
Prelude> superbig 10 :: Double
Infinity

-- The Integer type is arbitrary-precision though, and can go as big as we have memory for and patience to wait for the result.
Prelude> superbig 12 :: Integer
1044388881413152506691752710716624382579964249047383780384233483283953907971557456848826811934997558340890106714439262837987573438185793607263236087851365277945956976543709998340361590134383718314428070011855946226376318839397712745672334684344586617496807908705803704071284048740118609114467977783598029006686938976881787785946905630190260940599579453432823469303026696443059025015972399867714215541693835559885291486318237914434496734087811872639496475100189041349008417061675093668333850551032972088269550769983616369411933015213796825837188091833656751221318492846368125550225998300412344784862595674492194617023806505913245610825731835380087608622102834270197698202313169017678006675195485079921636419370285375124784014907159135459982790513399611551794271106831134090584272884279791554849782954323534517065223269061394905987693002122963395687782878948440616007412945674919823050571642377154816321380631045902916136926708342856440730447899971901781465763473223850267253059899795996090799469201774624817718449867455659250178329070473119433165550807568221846571746373296884912819520317457002440926616910874148385078411929804522981857338977648103126085903001302413467189726673216491511131602920781738033436090243804708340403154190336

-- If we don't specify a type, Haskell will infer one with arbitrary precision.
Prelude> superbig 12
1044388881413152506691752710716624382579964249047383780384233483283953907971557456848826811934997558340890106714439262837987573438185793607263236087851365277945956976543709998340361590134383718314428070011855946226376318839397712745672334684344586617496807908705803704071284048740118609114467977783598029006686938976881787785946905630190260940599579453432823469303026696443059025015972399867714215541693835559885291486318237914434496734087811872639496475100189041349008417061675093668333850551032972088269550769983616369411933015213796825837188091833656751221318492846368125550225998300412344784862595674492194617023806505913245610825731835380087608622102834270197698202313169017678006675195485079921636419370285375124784014907159135459982790513399611551794271106831134090584272884279791554849782954323534517065223269061394905987693002122963395687782878948440616007412945674919823050571642377154816321380631045902916136926708342856440730447899971901781465763473223850267253059899795996090799469201774624817718449867455659250178329070473119433165550807568221846571746373296884912819520317457002440926616910874148385078411929804522981857338977648103126085903001302413467189726673216491511131602920781738033436090243804708340403154190336

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X