2016-07-30 2 views
2

Я разработал небольшой сценарий для моделирования гипотезы Сиракуз в Powershell.Манипулирование большим числом в Powershell

Я использую его с очень большим числом и я учусь результат в графике Excel, но сохраняет форматирование PowerShell мой номер, когда они слишком велики:

Это результат я получаю для итераций Firsts

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

Я хотел бы иметь результат без форматирования «E + XX», есть ли способ, чтобы войти весь номер для анализа его состава?

EDIT: Сценарий я написал:

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 

} 

} 

$ Вэл имеет произвольное значение

У меня есть Powershell 2,0 только, я хочу обновить до Powershell v3 прямо сейчас.

Edit2: Это очень странно сейчас. В ISE скрипт не работает, число нечетное каждый раз.

Я думаю, мне удалось найти небольшое решение с помощью bigInt По какой-то причине он не работает на ISE, но работает на Powershell v3 cmd.

Я изменил мою LogWrite линию:

LogWrite ([bigint]$chiffre1),$val 

или

LogWrite ([bigint]$chiffre2),$val 

Мой журнал теперь имеет хорошее форматирование!

+2

Можете ли вы показать нам скрипт? –

+0

@PetSerAl Гипотеза Сиракуз включает в себя только целые числа. Тем не менее, 64 бита не будут делать. 'System.Numerics.BigInteger' может быть опцией –

+0

@ MathiasR.Jessen Учитывая форматирование, OP определенно использует' System.Double', который не может хранить значение «18014398509481985». – PetSerAl

ответ

4

В PowerShell 3.0+ можно использовать System.Numerics.BigInteger data type представлять сколь угодно большие целые значения:

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

Там даже встроенный тип ускорителя для него ([bigint]):

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

Для меня '[bigint]' отлично работает в v3. – PetSerAl

+0

Спасибо, не было компьютера с 3,0 под рукой, чтобы проверить :( –

+0

Невозможно это изменить с помощью нового 'format.ps1xml', следуя инструкциям [здесь] (https://technet.microsoft.com/ru -us/library/hh847831.aspx) – user4317867