魔法计算的其他例子

Pau*_*des 13 language-agnostic math performance

我在这里看到关于John Carmack计算平方根的神奇方法的这个主题,它引用了这篇文章:http://www.codemaestro.com/reviews/9.这让我很吃惊,我只是没有意识到计算sqrt会如此之快.

我只是想知道电脑游戏用来运行得更快的其他"魔法"的例子.

更新:John Carmack不是魔法代码的作者.这篇文章讲述了更多.谢谢@moocha.

Pio*_*cki 5

有一本书收集了很多这些"魔术"并且对你来说很有趣:黑客的喜悦.

你有很多技巧,比如钻头等等......(你有几个平方根算法,例如你可以在谷歌书籍版本上看到)


Von*_*onC 5

这不是一个数学黑客,但我喜欢这个关于Java6中的罗马数字:

public class Example {
    public static void main(String[] args) {
        System.out.println(
            MCMLXXVII + XXIV
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

由于重写规则,它将给你预期的结果(1977 + 24 = 2001):,
class Transform extends TreeTranslatorJava编译器的内部类.

Transform 访问源代码中的所有语句,并将名称与罗马数字匹配的每个变量替换为具有相同数值的int文字.

public class Transform extends TreeTranslator {
    @Override
    public void visitIdent(JCIdent tree) {
        String name = tree.getName().toString();
        if (isRoman(name)) {
            result = make.Literal(numberize(name));
            result.pos = tree.pos;
        } else {
            super.visitIdent(tree);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


ASh*_*lly 3

Bit Twiddling Hacks有许多很酷的技巧。

尽管其中一些内容现在已经过时,但我对 Michael Abrash 所著的《代码优化之禅》中的一些技巧感到敬畏。生命游戏的实施令人难以置信。