这是我的基本问题:
LOW←6 ⍝ lower bound
UPP←225 ⍝ upper bound
INC←0.01 ⍝ increment
VAL←50 ⍝ value
我想确定 VAL 是否是增量的倍数。我最初的解决方案是检查 (VAL-LOW)÷INC 是否为整数。这是我遇到 ⎕CT 问题的地方(以下不是我的实际代码,但它说明了我的情况)。
V←(VAL-LOW)÷INC
W←⌊0.5+|V
V
4400
W
4400
V=W
0
|V-W
1.somethingE¯13
哦亲爱的!(注意:当然,当我“赤脚”运行代码时,这不会发生 - 只有当它在实际环境中的调用堆栈深处时才会发生。)
第二个想法不是很优雅,但在纸面上似乎是合理的:
V←0 12⍕(VAL-LOW)÷INC
0=⍎(1+V⍳'.')↓V
将 V 格式化为 12 位,去掉小数点和它左边的所有内容。执行其余的并检查它是否等于零。那行得通,直到它没有,我只剩下十二个九了。
哦!
然后我突然想到,也许我并不总是需要 12 位小数。事实上,我只需要 INC 中的数量:
DEC←(⌽⍕INC)⍳'.'
V←0 DEC⍕(VAL-LOW)÷INC
0=⍎(1+V⍳'.')↓V
我不知道......它变得越来越混乱。当 UPP 很大而 INC 为 1000 时会发生什么?有没有更聪明的方法来做到这一点?
幼稚的解决方案是基于 LOW、INC 和 UPP 生成有效 VAL 的列表,但这样的解决方案总是有耗尽工作内存的风险。