2016-07-30 11 views
2

Ich habe ein kleines Skript entwickelt, um die Syracuse-Vermutung in Powershell zu simulieren.Große Nummer in Powershell manipulieren

ich es mit sehr großer Zahl bin mit und ich bin das Ergebnis in einem Excel-Diagramm, das Studium aber Powershell hält meine Zahlenformatierung, wenn sie zu groß sind:

Dies ist das Ergebnis i für die Premieren Iterationen erhalten

1.60827282342995E+40 
8.04136411714975E+39 
4.02068205857487E+39 
2.01034102928744E+39 
1.00517051464372E+39 
5.02585257321859E+38 

Ich mag würde das Ergebnis haben, ohne die Formatierung „E + XX“, ist es eine Möglichkeit, die gesamte Nummer zu protokollieren ihre Zusammensetzung zu analysieren?

EDIT: Das Drehbuch schrieb ich:

Remove-Item "E:\syracuse.txt" 

$Logfile = "E:\syracuse.txt" 
Function LogWrite 
{ 
Param ([string]$logstring) 

Add-content $Logfile -value $logstring 
} 

$chiffre1 = 0 
$chiffre2 = 0 


$chiffre1 = read-host "chiffre" 

write-host Sequence Initiale $chiffre1 

$val = 0 

while ($val -ne 32132135464664546546545645656454665412321321231321654657987465432132154) 

{ 


$val++ 

if ([bool]!($chiffre1%2)) 

{ 
    Write-Host "Pair" 
    $chiffre2=($chiffre1)/2 
    write-host $chiffre2 
    LogWrite $chiffre2,$val 

} 
Else 
{ 
    Write-Host "Impair" 
    $chiffre2 = $chiffre1*3+1 
    write-host $chiffre2 
    LogWrite $chiffre2,$val 

} 

if ([bool]!($chiffre2%2)) 

{ 
    Write-Host "Pair" 
    $chiffre1=($chiffre2)/2 
    write-host $chiffre1 
    LogWrite $chiffre1,$val 
} 
Else 
{ 
    Write-Host "Impair" 
    $chiffre1 = $chiffre2*3+1 
    write-host $chiffre1 
    LogWrite $chiffre1,$val 

} 

} 

$ val hat einen beliebigen Wert

Ich habe Powershell 2.0 nur, ich bin Powershell Aktualisierung jetzt v3.

Edit2: Es ist jetzt sehr komisch. In der ISE funktioniert das Skript nicht, die Nummer ist jedes Mal eine Ungerade.

Ich denke, ich habe mit Hilfe von bigInt eine kleine Lösung gefunden Aus irgendeinem Grund funktioniert es nicht auf ISE, aber es funktioniert auf der PowerShell v3 cmd.

Ich veränderte mein LogWrite Linie für:

LogWrite ([bigint]$chiffre1),$val 

oder

LogWrite ([bigint]$chiffre2),$val 

Mein log jetzt die gute Formatierung hat! beliebig große ganzzahlige Werte

+2

Können Sie uns zeigen die Skript? –

+0

@PetSerAl Die Syrakus-Vermutung beinhaltet nur ganze Zahlen. Trotzdem werden 64 Bits nicht ausreichen. 'System.Numerics.BigInteger' könnte eine Option sein –

+0

@ MathiasR.Jessen Angesichts der Formatierung, OP definitiv verwenden' System.Double', die nicht Ereignis speichern kann '18014398509481985' Wert. – PetSerAl

Antwort

4

In Powershell 3.0 und höher können Sie die System.Numerics.BigInteger data type verwenden, um darzustellen:

PS C:\> 1e15 
1E+15 
PS C:\> 1e15 -as [System.Numerics.BigInteger] 
1000000000000000 

Es gibt sogar einen eingebauten Beschleuniger für sie ([bigint]):

PS C:\> [bigint]1e15 
1000000000000000 
+1

Für mich funktioniert '[bigint]' gut in v3. – PetSerAl

+0

Danke, hatte keinen Computer mit 3.0 zur Hand zu überprüfen :( –

+0

Kann dies nicht mit einem neuen 'format.ps1xml' nach den Schritten [hier] geändert werden (https://technet.microsoft.com/en -us/library/hh847831.aspx) – user4317867