gpt4 book ai didi

powershell - 有没有办法获得大于 int32 的数字范围?

转载 作者:行者123 更新时间:2023-12-01 16:09:48 25 4
gpt4 key购买 nike

我需要在一个非常大的数字范围内迭代:

例如在 99999999999999950 和 100000000000000000 之间

我正在调用一个函数,将较低和较高的数字作为变量传递,但不一定会提前知道它们是什么,所以我想不出一种方法来减少它们并在范围内扩展它们/环形。

我可以使用[uint64],但似乎范围运算符例如$lower..$upper仅适用于int32。它尝试将任何更大的值转换为 int32 以生成范围。

$lower = [uint64]99999999999999950
$upper = [uint64]100000000000000000

foreach ($i in $lower..$upper){
#do something
}

错误是:

Cannot convert value "99999999999999950" to type "System.Int32". Error: "Value was either too large or too small for an Int32."
At line:4 char:16
+ foreach ($i in $lower..$upper){
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastIConvertible

我认为这是有道理的,因为它太大了,但是有没有办法在 PowerShell 中完成我需要的操作?范围运算符是否无法处理大数,或者我该如何解决这个问题?

最佳答案

您可以在 for 循环中使用 int64 或小数。我相信“foreach ($i in 1..$someint)”无论如何都会转换为类似的东西。

for ($i = 99999999999999950; $i -le 100000000000000000; $i++) {
$i
}

for ($i = 99999999999999950d; $i -le 100000000000000000d; $i++) {
$i
}

有趣的是,内存使用量并没有随着较大的 foreach 间隔而增加。

foreach ($i in 1..200000000) { sleep 1 }

然后在另一个窗口中:

get-process powershell

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
621 38 82488 95356 1.09 2240 46 powershell
674 36 61972 20680 1.77 10836 46 powershell

如果你真的想让你的电脑慢下来,就这样做。我没等它结束就关上了窗口。 2.5 GB 工作集内存。

 $a = 1..200000000
get-process powershell

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
572 37 3172532 2563624 33.19 2240 46 powershell
613 37 62376 20944 2.28 10836 46 powershell

关于powershell - 有没有办法获得大于 int32 的数字范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57469132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com