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

标签 objective-c c math

我正在尝试编写一些单位转换器代码,这些代码基本上使用公式 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/

相关文章:

objective-c - 如何从核心数据中删除具有特定属性的项目?

c++ - 有没有办法停止隐式指针转换为 void *

c - MATLAB mexCallMatlab 导致崩溃

javascript - 从计算自然对数的函数中得到不正确的结果

math - 神经网络输出非二进制值?

c++ - Cocos2dx 动画(不使用过时的方法)

objective-c - 设置定时器循环固定时间

ios - 在自定义 UITableViewCell 中调整 UITextView 的大小

c - 函数接受两个字符串,要比较第 n 个字符

php - 给定每个矩形的左上角(x0,y0)和右下角(x1,y1)的数学/算法/JS : How to determine if 2+ rectangles intersect,