【发布时间】:2013-01-06 22:28:11
【问题描述】:
我正在渲染 buddhabrot 分形,我正在寻找一些优化/加速,我想知道尝试使用按位运算符执行 z = z^2 + c 是否值得。我已经把它简化了一点。
double zi2 = z.i*z.i;
double zr2 = z.r*z.r;
double zir = z.i*z.r;
while (iterations < MAX_BUDDHA_ITERATIONS && zi2 + zr2 < 4) {
z.i = c.i;
z.i += zir;
z.i += zir;
z.r = zr2 - zi2 + c.r;
zi2 = z.i*z.i;
zr2 = z.r*z.r;
zir = z.i*z.r;
iterations++;
}
【问题讨论】:
-
您使用什么语言?如果它是基于 VM 的(例如 java 或 c#),它可能会适得其反……
-
我正在使用 C 编程,这就是我的想法。是否值得,以及如何。
-
您所说的“它必须是可能的,因为编译器这样做......”是什么意思?如果编译器优化了,为什么要在源码中做呢?
-
我想我有点困惑,我已经解决了我的问题。只是在高中,我还是个计算新手,很抱歉。
-
@JordanBrown,您可能会发现一些有趣的研究:整数(有符号和无符号)的存储,浮点数的存储(“double”是浮点类型) .汇编语言也会有所帮助。编译器将高级指令转化为汇编语言指令;有些甚至可以让您保存生成的汇编代码(例如 gcc 的
-S标志)。分解复杂的操作甚至会适得其反。编译器可以手动进行,而不是让它选择适合高级操作的优化。
标签: c fractals bit-manipulation