小编pla*_*cel的帖子

检测 Visual Studio 中 SSE/SSE2 指令集的可用性

如何在代码中签入 Visual Studio 编译器是否启用了 SSE/SSE2?

我试过了,#ifdef __SSE__但没有用。

c++ x86 sse sse2 visual-studio

5
推荐指数
3
解决办法
9560
查看次数

CDK与Qt"信号"碰撞

我正在为我的Qt项目构建一个NCurses接口.我想使用CDK,但我认为这个结构的"信号"成员与Qt"signals"关键字冲突.

/usr/include/linux/cdk.h:411: error: expected unqualified-id before 'protected'
Run Code Online (Sandbox Code Playgroud)

我怎样才能让CDK与Qt一起工作?

c++ qt ncurses c-preprocessor ncurses-cdk

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

将有符号整数范围映射到无符号

我遇到一个问题,应该将有符号整数转换为unsigned,保留它们的范围和顺序.

鉴于以下定义:

#include <limits>

#define MIN(X) std::numeric_limits<X>::min();
#define MAX(X) std::numeric_limits<X>::max();
Run Code Online (Sandbox Code Playgroud)

将有符号范围[MIN(T),MAX(T)]映射到无符号范围[0,MAX(U)]的最快和最正确的方法是什么?

哪里:

T是有符号整数类型

U是无符号整数类型

sizeof(T)== sizeof(U)

我尝试了各种比特和数字方法来提出解决方案,但没有成功.

c++ int integer c++11

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

时间校正的Verlet数值积分公式

Johnathan Dummer在网上有一个常用的verlet-integration公式,叫做Time-Corrected Verlet.但是我已经阅读了几个论坛帖子,人们在某些条件下会得到奇怪或意想不到的结果.

Johnathan Dummer的公式:

x1 = x + (x – x0) * dt / dt0 + a * dt^2
Run Code Online (Sandbox Code Playgroud)

还有一个stackoverflow答案,它说明了Dummer的时间校正公式被打破了,并且海报将他自己的推导作为正确的推导.

通过stackoverflow答案建议正确的公式

x1 = x + (x – x0) * dt / dt0 + a * dt * (dt + dt0) / 2
Run Code Online (Sandbox Code Playgroud)

嗯,达默的公式真的坏了吗?如果是的话,海报的推导更好吗?

PS:Dummer x1 = x - x0 + a * dt^2在他的网站上使用verlet集成公式而不是正确的,这也很奇怪x1 = 2x - x0 + a * dt^2.

math numerical-methods numerical-integration game-physics verlet-integration

5
推荐指数
2
解决办法
1295
查看次数

Variadic模板构造函数优先级

鉴于以下简单 struct

template <typename T>
struct A
{
   A(T a) {}

   template <typename ... Ts>
   A(T a, Ts ... more) {}
};

int main()
{
   A<int> a(1);
}
Run Code Online (Sandbox Code Playgroud)

什么是A(T a)将被调用而不是可变参数模板构造函数的保证,为什么?

c++ c++11

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

通过参数包从任意索引初始化 std::array

std::array通过可变参数模板参数初始化一个,从给定的索引开始,可以通过以下方式完成:

#include <array>

template <typename T, size_t N>
struct A
{
   template <typename ... Ts>
   A(size_t i, Ts ... vals)
   {
      constexpr size_t P = sizeof...(vals);
      std::array<T, P> temp{ vals... };

      for (size_t j = 0; j < P; ++j)
      {
         arr[i + j] = temp[j];
      }
   }

   std::array<T, N> arr;
};
Run Code Online (Sandbox Code Playgroud)

但是是否可以在不将参数包转换为临时元组或另一个 std::array 的情况下实现相同的目标?

c++ templates variadic-templates c++11 c++14

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

lld 未定义符号:mainCRTStartup

我的 cpp 代码:

int main(int argc, char** argv) {}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令来编译和链接它:

// I want to read the result ir
clang -S -emit-llvm main.cpp 

// I want to compile directly from ir
llc -filetype=obj main.ll
lld -flavor link main.obj // <root>: undefined symbol: mainCRTStartup Link failed
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

llvm-clang lld

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

计算面法线和缠绕

给定一个凸多面体,其顶点定义为 (x, y, z),指定多面体的面。

如何计算多面体每个面的表面法线?

我需要表面法线来计算顶点法线来执行Gouraud 着色。我能找到的关于如何做到这一点的唯一线索是 Newell 的方法,但我如何确保法线是向外法线而不是向内法线?谢谢你的帮助。

c++ 3d geometry normals computational-geometry

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

如何用SSE3实现签名功能?

1)有没有办法使用具有以下特征的SSE3(无SSE4)有效地实现符号功能

  • 输入是一个浮点向量__m128.
  • 输出也应该__m128以[-1.0f,0.0f,1.0f]作为其值

我尝试过这个,但它不起作用(虽然我认为它应该):

inputVal = _mm_set_ps(-0.5, 0.5, 0.0, 3.0);
comp1 = _mm_cmpgt_ps(_mm_setzero_ps(), inputVal);
comp2 = _mm_cmpgt_ps(inputVal, _mm_setzero_ps());
comp1 = _mm_castsi128_ps(_mm_castps_si128(comp1));
comp2 = _mm_castsi128_ps(_mm_castps_si128(comp2));
signVal = _mm_sub_ps(comp1, comp2);
Run Code Online (Sandbox Code Playgroud)

2)有没有办法创建"标志"功能(我不确定正确的名称).即,如果A > B结果将是10否则.结果应该是float-point(__m128),就像它的输入一样.

更新:Cory Nelson的回答似乎在这里有效:

__m128 greatherThanFlag = _mm_and_ps(_mm_cmpgt_ps(valA, valB), _mm_set1_ps(1.0f));    
__m128 lessThanFlag = _mm_and_ps(_mm_cmplt_ps(valA, valB), _mm_set1_ps(1.0f));
Run Code Online (Sandbox Code Playgroud)

x86 sse x86-64 simd vectorization

5
推荐指数
2
解决办法
815
查看次数

专业面试的意外答案

这是一个100%的理论问题,也许是基于意见的.

在一次专业的采访中,我得到了一个印刷页面,里面有很多写得很好,格式不正确的两个代码,class可以在演讲中逐行分析.让我们把这些数据结构AB.没有问题陈述或有关预期行为的任何信息.

然而,他们的一个问题真让我生气.

在确定了算法的可疑行为以及许多潜在和实际错误后,他们要求我再确定一个错误.我发现了其他一些明显的问题,但我并没有弄清楚他们想要什么.好吧,当他们告诉我答案时,它引起了我的注意.的简化版本A,并B为下面的(我只留下这是他们的想法有一部分的方法):

template <typename T>
class A
{
public:

    // elements are dynamically allocated on the heap

    const T& getValue(unsigned i) const // I'm not even sure it was const
    {
        // return element at position 'i'
    }

    virtual void setValue(unsigned i, const T &value)
    {
        // sets the element at position 'i'
    }
};

template <typename T>
class B: public A<T>
{
public:

    virtual void setValue(unsigned i, …
Run Code Online (Sandbox Code Playgroud)

c++ theory oop polymorphism

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