gpt4 book ai didi

c++ - 区间函数

转载 作者:行者123 更新时间:2023-11-28 08:32:14 25 4
gpt4 key购买 nike

我需要编写一个函数,在应用增量后在区间 [a..b] 内返回一个值。

void foo(a, b, val, delta);

示例 1:

value = foo(0, 360, 120, -240);

值:240

示例 2:

value = foo(360, 0, 60, 340);

值:40

我已经能够编写此行为的代码,但我想将我的实现与(最有可能的)更优化的解决方案进行比较。

最佳答案

我在 Perl 中输入了几行。似乎适用于我测试的几个示例。

print ((($val + $delta) % abs($a - $b)) + ($a<$b?$a:$b));    

我将 delta 添加到值中,用 A 和 B 之间的绝对差对其进行修改(保证值在范围内),然后将较小的值加回去(以防范围不在某个数字之间和 0)。最后一项是 if-then 速记技术,如果条件为真,则取第一个值,否则取第二个值。

希望我能正确理解您想要做的事情。

编辑:再看一遍,如果两边都不为 0,我认为上面的等式不能正确处理边界。重新思考后,我认为下面的更好:

print (((($val + $delta) % ($a>$b?$a:$b) - ($a<$b?$a:$b)) % abs($a-$b)) + ($a<$b?$a:$b));

之前,将 20 添加到较低的值,最终将 40 添加到最终结果。我不小心加了 20 两次。一次是在最后一个学期,一次是因为我修改了一个小 20 的值(余数加 20)。我无法取消最后一项,因为那样它就不会在范围内,而且我无法从 mod 中删除减法,因为这可能会导致值超出区间的上限。相反,我不得不从初始添加中减去较低的值来补偿。然而,这只能从正值中减去才是正确的,所以我用更高的值对其进行修改,使其为正,并确保修改后的值不变(取绝对值会改变以后修改的内容)。

关于c++ - 区间函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1457840/

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