C 编译器证明费马大定理是错误的 - 嵌入在学术界中

主要观点:讨论编译器优化与终止分析的冲突,通过不同的 C 代码示例展示编译器对无限循环的处理及相关问题,如一些编译器在优化时会终止本应无限循环的代码,而部分编译器能正确处理;还涉及费马大定理相关代码及编译器对其的处理等。
关键信息:

  • 用不同方式写无限循环,多数优化编译器能识别并相应生成代码,如while (1) { }for (;;) { }
  • 为让编译器不理解循环为无限,写了特殊的无限循环代码,涉及费马大定理的特殊情况,当优化开启时,一些编译器会允许其终止。
  • 不同编译器(如 LLVM/Clang、Open64-x86、Sun CC、Intel CC 等)在处理相关代码时表现不同,部分会终止本应无限的循环,部分能正确处理。
  • 微软编译器也有终止相关代码的 bug,Visual Studio 2008 和 2010 均如此。
  • 对关于此问题的一些疑问进行了回答,如是否真的重要、编译器是否应进行终止分析等。
    重要细节:
  • 给出具体的 C 代码示例,包括无限循环代码、涉及费马大定理的代码等。
  • 展示不同编译器对这些代码的处理结果,如生成的汇编代码等。
  • 解释编译器在处理代码时的选择倾向,即更注重速度而非正确性。
  • 提及费马大定理的相关信息,如 n=3 的特殊情况的证明时间等。
阅读 25
0 条评论