为什么这段代码,
const float x[16] = { 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8,
1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6};
const float z[16] = {1.123, 1.234, 1.345, 156.467, 1.578, 1.689, 1.790, 1.812,
1.923, 2.034, 2.145, 2.256, 2.367, 2.478, 2.589, 2.690};
float y[16];
for (int i = 0; i < 16; i++)
{
y[i] = x[i];
}
for (int j = 0; j < 9000000; j++)
{
for (int i = 0; i < 16; i++)
{
y[i] *= …Run Code Online (Sandbox Code Playgroud) c++ floating-point performance compilation visual-studio-2010
双值存储更高的精度并且是浮点数的两倍,但英特尔CPU是否针对浮点数进行了优化?
也就是说,双重操作与+, - ,*和/的浮点运算一样快或快.
对于64位架构,答案是否会改变?
我想对"非正常数据"以及它的内容有一个广泛的看法,因为我认为我唯一正确的事情是从程序员的角度来看与浮点值特别相关的事实,它与一般事项有关 -从CPU角度看计算方法.
有人可以为我解密这2个字吗?
编辑
请记住,我是面向C++应用程序而且只面向C++语言.
我在网上搜索无济于事.
有没有办法让Xcode和Visual C++将非规范化数字视为0?我原以为IDE首选项中有一个选项可以启用此选项,但似乎无法找到它.
我正在做一些跨平台音频的东西,需要停止某些处理器占用资源.
干杯
我是电路设计师,而不是软件工程师,所以我不知道如何追踪这个问题.
我正在使用一些IIR过滤器代码,当我通过过滤器处理极小的值时,我遇到极慢的执行时间问题.为了找到问题,我写了这个测试代码.
通常,循环将在大约200毫秒左右运行.(我没有测量它.)但是当TestCheckBox-> Checked时,它需要大约7秒才能运行.问题在于环路内A,B,C和D的大小减小,这正是IIR滤波器输入变为零后的值所发生的情况.
我认为问题在于变量的指数值小于-308.一个简单的解决方法是将变量声明为long double,但这在实际代码中并不是一个简单的修复,而且我似乎不应该这样做.
任何想法为什么会发生这种情况以及简单的修复可能是什么
如果它很重要,我使用的是C++ Builder XE3.
int j;
double A, B, C, D, E, F, G, H;
//long double A, B, C, D, E, F, G, H; // a fix
A = (double)random(100000000)/10000000.0 - 5.0;
B = (double)random(100000000)/10000000.0 - 5.0;
C = (double)random(100000000)/10000000.0 - 5.0;
D = (double)random(100000000)/10000000.0 - 5.0;
if(TestCheckBox->Checked)
{
A *= 1.0E-300;
B *= 1.0E-300;
C *= 1.0E-300;
D *= 1.0E-300;
}
for(j=0; j<=1000000; j++)
{
A *= 0.9999;
B *= 0.9999;
C …Run Code Online (Sandbox Code Playgroud) 朋友要求我分享过去一段时间我偶然发现的事情.原帖是从这里获取的.问题陈述可以在这里找到.基本上是算法竞赛的网站.
我被解决了使用以下代码解决的算法问题:
double dp[80002][50];
class FoxListeningToMusic {
public:
vector <double> getProbabilities(vector <int> length, int T) {
memset(dp, 0, sizeof(dp));
int n = length.size();
for(int i = 0; i < n; i++)
dp[0][i] = 1.0 / (double)n;
double mul = 1.0 / (double)n;
int idx ;
for(int i = 1; i <= T; i++) {
for(int j = 0; j < n; j++) {
idx = i - length[j];
if(idx >= 0) {
for(int k = 0; …Run Code Online (Sandbox Code Playgroud) 我有一个简单的程序:
int main()
{
return 2*7;
}
Run Code Online (Sandbox Code Playgroud)
GCC和clang优化启动时会生成2指令二进制,但icc会产生奇怪的输出.
push rbp #2.1
mov rbp, rsp #2.1
and rsp, -128 #2.1
sub rsp, 128 #2.1
xor esi, esi #2.1
mov edi, 3 #2.1
call __intel_new_feature_proc_init #2.1
stmxcsr DWORD PTR [rsp] #2.1
mov eax, 14 #3.12
or DWORD PTR [rsp], 32832 #2.1
ldmxcsr DWORD PTR [rsp] #2.1
mov rsp, rbp #3.12
pop rbp #3.12
ret
Run Code Online (Sandbox Code Playgroud) c++ ×7
performance ×3
x86 ×3
algorithm ×1
assembly ×1
audio ×1
c++builder ×1
compilation ×1
cpu ×1
hardware ×1
icc ×1
intel ×1
xcode ×1