gpt4 book ai didi

objective-c - 组合多个 y = mx + b 方程的最有效方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:19 25 4
gpt4 key购买 nike

我正在尝试编写一些单位转换器代码,这些代码基本上使用公式 y = mx + b 定义方程(因此“规则”由乘数和加数组成)并将它们链接在一起以在多个单位之间进行转换,而无需指定每个可能的转换组合(它使用路径查找算法来计算,但这不属于本问题的范围)。

无论如何,我有一些东西以以下形式吐出连续的结构:

typedef struct {
double multiplier;
double summand
} ConversionRule;

我想做的是将多个规则“压缩”在一起。我可以有一组这样的结构:

ConversionRule rule1 = { .multiplier = 2, .summand = 4 };
ConversionRule rule2 = { .multiplier = 4, .summand = 0 };
ConversionRule rule3 = { .multiplier = 3, .summand = 0 };
ConversionRule rule4 = { .multiplier = 1, .summand = 8 };

如果我使用规则 1 到 4 转换数字“2”,那么我会查看以下等式链:

double input = 2;
input *= rule1.multiplier;
input += rule1.summand;
input *= rule2.multiplier;
input += rule2.summand;
input *= rule3.multiplier;
input += rule3.summand;
input *= rule4.multiplier;
input += rule4.summand;
printf("The answer is: %f\n", input);

在这个例子中,它会打印 104 的结果。但是,我不想单独运行每个连续的规则,因为有时会有几百个规则,我真的想压低任何一个不必要的数学。

我一直在尝试弄清楚如何将它们全部塞进一个规则,然后可以将其应用于输入仅一次,但我不确定该怎么做(我可能不太清楚我正在寻找的术语是什么,如果有的话)。

最有效的方法是什么?

最佳答案

如果你想构造一个规则,它具有按顺序应用两个规则的效果,你可以这样做:假设你有两个转换器

Ax+B
Cx+D

如果按顺序应用它们,结果将是

C(Ax+B)+D = CAx+CB+D

可以将其重写为具有乘数 CA 和加数 CB+D 的单个规则。

ConversionRule combine(ConversionRule r1, ConversionRule r2) {
ConversionRule res;
res.multiplier = r1.multiplier*r2.multiplier;
res.summand = r2.multiplier*r1.summand + r2.summand;
return res;
}

您可以通过在循环中应用相同的逻辑,将多个规则组合成一条链。

关于objective-c - 组合多个 y = mx + b 方程的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31491250/

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