我正在运行一些测试来比较 C 和 Java 并遇到了一些有趣的事情。在 main 调用的函数中而不是在 main 本身中运行优化级别 1 (-O1) 的完全相同的基准代码,导致性能大约翻倍。我正在打印 test_t 的大小,以毫无疑问地验证代码是否正在编译为 x64。
我将可执行文件发送给运行 i7-7700HQ 的朋友并得到了类似的结果。我正在运行 i7-6700。
这是较慢的代码:
#include <stdio.h>
#include <time.h>
#include <stdint.h>
int main() {
printf("Size = %I64u\n", sizeof(size_t));
int start = clock();
for(int64_t i = 0; i < 10000000000L; i++) {
}
printf("%ld\n", clock() - start);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并且更快:
#include <stdio.h>
#include <time.h>
#include <stdint.h>
void test() {
printf("Size = %I64u\n", sizeof(size_t));
int start = clock();
for(int64_t i = 0; i < 10000000000L; i++) …Run Code Online (Sandbox Code Playgroud) 我在Java中为阶乘编写了一个函数,以便可以计算e,但是当我输入大于17的数字时,总是得出1。
这是功能:
public int fact(int n) {
for(int i = n-1; i > 1; i--) {
n *= i;
}
if(n <= 0) {
n = 1;
}
return n;
}
Run Code Online (Sandbox Code Playgroud) 本质上,发生的情况是我的光线追踪器渲染的 3D 立方体出现了一些奇怪的扭曲,随着相机向上移动,这种扭曲会继续恶化,即使立方体位于屏幕上的同一位置。
代码位于http://pastebin.com/HucgjRtx
这是输出的图片:
http://postimg.org/image/5rnfrlkej/
编辑:问题解决了,因为我只是错误地计算了向量的角度。我发现的最好方法是根据 FOV (Z) 当前像素 X 和当前像素 Y 创建一个向量,然后对该向量进行归一化。