小编pra*_*pin的帖子

方积累不起作用

以下脚本应该计算从0到4的整数平方和.

数学上,0²+1²+2²+3²+4²= 30,但在Python 3.2上运行时脚本打印4!为什么?

total = 0
for val in range(5):
    v?l = val * val
    t?tal = total + val

print(t?tal)
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

放宽执行顺序的规则

C和C++标准规定执行顺序必须严格遵循源指令顺序.编译器可以按任何顺序自由地评估指令中的子表达式,但不能重新排序用分号或冒号分隔的指令.

例如,在指令中:

A = A + B * C + D * E;
Run Code Online (Sandbox Code Playgroud)

编译器可能选择在B*C之前执行D*E,或者在结尾添加A.

如果现在将相同的计算拆分为各种指令:

int t1 = B * C;
t1 += D * E;
A += t1;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,编译器无法在B*C之后评估D*E.

通常,这种代码稍微慢一点,因为编译器无法优化特定硬件的CPU指令的顺序.

我想做的是相反的方式.例如,如果展开的循环的主体读取:

A[0] = B[0] * C[0];
A[1] = B[1] * C[1];
A[2] = B[2] * C[2];
A[3] = B[3] * C[3];
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉编译器这四条指令可以按任何顺序进行评估,因为它们对不同的数据进行操作?即使是非便携式技巧也是受欢迎的.

c c++ optimization

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

像 C++ 中的 java 一样打印变量

我的代码:

#include<iostream>

int main(){
    int n=2;

    std::cout << "hello world"+n<<std::endl;
    printf("hello world");
}
Run Code Online (Sandbox Code Playgroud)

我试图像java语法一样打印变量C++,只是作为一个实验。但是输出:

llo world
hello world
Run Code Online (Sandbox Code Playgroud)

谁能解释一下?

c++ java

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

优化 ARM Apple Clang 中关于将双精度型隐式转换为字节的错误

我在我们的 C++ iOS 应用程序中发现了一个严重的错误,我怀疑这是由基于 ARM 的 Apple Clang 上的编译器错误引起的。

我能够在 Mac M1 机器上的 MRE 中重现该错误。

#include <cstdio>

int main(int argc, const char** argv)
{
    int total = 0;
    for(double a=1000; a<10000; a*=1.1)
    {
        unsigned char d = a / 0.1;
        total += d;
    }
    printf("Total: %d\n", total);
}
Run Code Online (Sandbox Code Playgroud)

在没有优化的情况下编译,测试程序总是产生相同的输出:

% ./a.out            
Total: 3237
% ./a.out
Total: 3237
% ./a.out
Total: 3237
Run Code Online (Sandbox Code Playgroud)

然而,当进行优化编译时,结果数字似乎是随机的:

% clang -O3 test.cpp 
% ./a.out            
Total: 74841976
% ./a.out
Total: 71057272
% ./a.out
Total: 69828472
Run Code Online (Sandbox Code Playgroud)

Apple Clang …

c++ clang++

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

标签 统计

c++ ×3

c ×1

clang++ ×1

java ×1

optimization ×1

python ×1

python-3.x ×1