小编Ano*_*oob的帖子

如果在 Intel Skylake CPU 上作为函数调用,为什么我的空循环运行速度快两倍?

我正在运行一些测试来比较 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)

c performance assembly x86-64 cpu-architecture

8
推荐指数
1
解决办法
179
查看次数

n&gt; 17时阶乘函数返回1

我在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)

java

1
推荐指数
1
解决办法
86
查看次数

光线追踪器根据相机角度扭曲立方体?

本质上,发生的情况是我的光线追踪器渲染的 3D 立方体出现了一些奇怪的扭曲,随着相机向上移动,这种扭曲会继续恶化,即使立方体位于屏幕上的同一位置。

代码位于http://pastebin.com/HucgjRtx

这是输出的图片:

http://postimg.org/image/5rnfrlkej/

编辑:问题解决了,因为我只是错误地计算了向量的角度。我发现的最好方法是根据 FOV (Z) 当前像素 X 和当前像素 Y 创建一个向量,然后对该向量进行归一化。

java raytracing

0
推荐指数
1
解决办法
123
查看次数

标签 统计

java ×2

assembly ×1

c ×1

cpu-architecture ×1

performance ×1

raytracing ×1

x86-64 ×1