所以,我在C库的C程序中使用qsort.它按预期工作,所以我决定玩比较器.
比较器1(我用它):
int compare (const void * a, const void * b)
{
if (*(double*)a > *(double*)b) return 1;
else if (*(double*)a < *(double*)b) return -1;
else return 0;
}
Run Code Online (Sandbox Code Playgroud)
比较器2:
int comp (const void *a, const void *b)
{
const double *ia = (const double *)a; // casting pointer types
const double *ib = (const double *)b;
return *ia - *ib;
}
Run Code Online (Sandbox Code Playgroud)
第一个按我想要的方式工作.第二个应该是第一个做同样的事情.我想使用第二个,因为程序运行得快一点,但事实上它并没有真正排序任何东西!
我很确定我在较小的阵列上使用了比较器#2并且它有效.除非我在那里遗漏了什么.
所以我觉得在我看来这是一个非常奇怪的问题.我有一个粗略的系统,用于在2D平面上对物体施加力,其中一个最简单的计算似乎是导致我的一个变量溢出.我有以下几行:
int ySign = m_Momentum.y / abs(m_Momentum.y);
Momentum有两个数据成员,x y(m_Momentum是一个SFML sf :: Vector2 of floats).现在,通常公式应该总是返回1或-1,这取决于Momentum.y的符号(除非我非常错误).
然而,它偶尔会返回极其高的数字,如-2147483648.在那种特殊情况下,m_Momentum.y的值是0.712165(两个值都是通过发送到std :: cout获得的); 我再次尝试,m_Momentum.y是-0.578988,而ySign仍然是-2147483648.有一个相应的xSign有时会翻转,通常具有相同的最终值.我不能100%确认这总是结果,但目前似乎是这种情况.
我有点难以理解为什么会这样,当它发生时,它基本上使我的程序无效(它会立即向错误的方向发送数百万像素的对象).从逻辑上看,上面的这一行似乎不可能返回如此奇怪的结果.
以下是我正在处理的功能.可能是错误的做法,但我没想到会出现如此可怕的错误.它产生的打印输出显示所有数字看起来都正常,直到打印出标志; 其中一个总是很大,然后你会看到像-2.727e + 008这样的数字(据我所知,这是科学记数法 - 即-2.727*10 ^ 8).
///MODIFY MOMENTUM
//Reset, if necessary
if (Reset == true)
{
m_Momentum.x = 0;
m_Momentum.y = 0;
}
sf::Vector2<float> OldMoment = m_Momentum;
//Apply the force to the new momentum.
m_Momentum.x += Force.x;
m_Momentum.y += Force.y;
sf::Vector2<float> NewMoment = m_Momentum;
//Calculate total momentum.
float sqMomentum = m_Momentum.x * m_Momentum.x + m_Momentum.y * m_Momentum.y; …Run Code Online (Sandbox Code Playgroud) 基本上我正在研究物理游戏.需要减少侧向运动(如接近0,而不是变为负值),但我不知道它在哪个方向,所以我不知道是添加阻力还是减去阻力.
(如果物品向右移动,则具有正向力,向左移动,负向力)
现在我这样做:
if (objects[i]->force.x > 0)
objects[i]->force.x -= drag;
else
objects[i]->force.x += drag;
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但我觉得必须有一个更时尚的方式来做到这一点.
找到一种确保它不会超过0的方法也不会有什么坏处
从xcode 5.0移动到5.1时,在GPUImage Library中获得以下错误.在google上搜索之后我发现我需要像这样发送int [NSNumber numberWithInt:number]但问题是我没有控制在下面给出的代码中传递给sortedArrayUsingComparator的值.
错误日志:
不兼容的块指针类型将'int(^)(__ strong id,_ strong id)'发送到'NSComparator'类型的参数(又名'NSComparisonResult(^)( _ strong id,__strong id)')
此行出错:NSArray*sortedPoints = [points sortedArrayUsingComparator:^(id a,id b){
- (id) initWithCurveFile:(NSString*)curveFile
{
self = [super init];
if (self != nil)
{
NSString *bundleCurvePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: curveFile];
NSFileHandle* file = [NSFileHandle fileHandleForReadingAtPath: bundleCurvePath];
if (file == nil)
{
NSLog(@"Failed to open file");
return self;
}
NSData *databuffer;
// 2 bytes, Version ( = 1 or = 4)
databuffer = [file readDataOfLength: 2];
version = CFSwapInt16BigToHost(*(int*)([databuffer …Run Code Online (Sandbox Code Playgroud) 在过去,我们一直在使用Visual Studio的_fpclass来了解无限是积极还是消极:http: //msdn.microsoft.com/en-us/library/aa246882%28v=vs.60%29.aspx
传递到std :: fpclassify,正负无限之间没有区别:http://en.cppreference.com/w/cpp/numeric/math/fpclassify
我可以使用其中一种方法安全地检查无限的符号吗?
C/C++中是否有标准符号函数(signum,sgn)?
注意:
笔记2:
float f = -0.050000;
Run Code Online (Sandbox Code Playgroud)
我想做下一个规则:
if (f < 0) f -= 0.2;
else f += 0.2;
Run Code Online (Sandbox Code Playgroud)
可以选择一行吗?
谁有挑战?我正在寻找一种有效的算法来实现一个固定最大值的数字的包装/溢出行为.
比如,最大可能的数值定义为:
#define MAX_NUMBER_VALUE 100
Run Code Online (Sandbox Code Playgroud)
并且该函数translate采用带符号的32位或64位整数值并使用该MAX_NUMBER_VALUE常量"包裹它":
int_fast8_t translate(int_fast32_t value) {
if (abs(value) > MAX_NUMBER_VALUE) {
return ...; // This!
}
return value;
}
Run Code Online (Sandbox Code Playgroud)
预期的输入和输出:
translate(55) => 55
translate(100) => 100
translate(101) => -100
translate(102) => -99
translate(200) => -1
translate(202) => 1
translate(300) => 99
translate(-40) => -40
translate(-100) => -100
translate(-101) => 100
translate(-102) => 99
translate(-200) => 1
translate(-201) => 0
...
Run Code Online (Sandbox Code Playgroud)
价值"围绕"数字"行走",好像它是一个圆形行星.这看起来类似于C/C++处理int溢出条件的方式.我想知道是否有一种快速有效的方法来实现这种包装?像位移或其他按位操作一样?
嗨,我创建了这个功能,用于将游戏世界分成块.每个块大小为32块.此公式计算给定世界坐标的给定块编号的起始坐标.它运作良好,但我认为可以优化它,但我不知道.重要的是公式与负数一起使用.
static int wrld2chnk(int wrld)
{
if (wrld % 32 != 0)
{
if (wrld < 0)
wrld -= (32 + wrld % 32);
else
wrld -= wrld % 32;
}
return wrld;
}
Run Code Online (Sandbox Code Playgroud)
//这些是可用于验证结果的示例值.每个rpw中的第一个值是方法输入,第二个是输出:
(0, 0);
(31, 0);
(32, 32);
(33, 32);
(-1, -32);
(-31, -32);
(-32, -32);
(-33, -64);
(-34, -64);
(-64, -64);
(-70, -96);
Run Code Online (Sandbox Code Playgroud) 我有一种情况,我正在对大量行进行计算,如果我可以避开条件语句,我可以真正提高性能.
我需要的是给定的正,零或负整数我想分别得到结果1,0,-1.
所以,如果我这样做col/ABS(col),我将获得1为正数,-1为负数,但当然如果col等于0,那么我将得到一个错误.我不能得到错误.
这看起来很简单,但我无法绕过它.
这可能是一个简单的问题,但我不知道对有符号整数值数组进行排序的方法.
我的数组在排序之前,
pointsAry (-2,-7,-5,0,-3,2,-1,-4,1,3,-6)
Run Code Online (Sandbox Code Playgroud)
使用后
NSArray * sortedArray = [pointsAry sortedArrayUsingComparator:^(id str1, id str2){
return [(NSString *)str1 compare:(NSString *)str2 options:NSNumericSearch];
}];
Run Code Online (Sandbox Code Playgroud)
结果
sortedArray : (-1,-2,-3,-4,-5,-6,-7,0,1,2,3)
Run Code Online (Sandbox Code Playgroud)
对于有符号值,sortedArray格式不正确,所以我需要
(-7,-6,-5,-4,-3,-2,-1,0,1,2,3)
Run Code Online (Sandbox Code Playgroud)
如何按上述格式排序?提前致谢.
该dst = signum(src)函数将所有正元素的值设置为srcto 1,并将所有负元素的值设置为-1.
但是,似乎无法signum()通过应用OpenCV函数来实现该功能threshold().我也不想遍历src,因为它效率低下.
我创建了一个函数,该函数应该能够计算2个整数(正负)之间的加法,乘法和平方根。但是,我的代码仅适用于正整数。
例如,如果我插入3和5,它将计算(3)+(4)+(5)= 12,但是如果我输入-3和-5,答案将为0。如果我输入5,也会发生相同的情况作为我的第一个整数,然后是3作为我的第二个整数,而不是第3个然后是5。我无法弄清楚我的代码出了什么问题。我非常感谢您的指导并为我的问题提供帮助!
int calculate(int num1, int num2, char op) {
int answer, x;
if (op == 'a') {
answer = 0;
for (x = num1; x <= num2; x++) {
answer += x;
}
}
if (op == 'm') {
answer = num1;
for (x = num1 + 1; x <= num2; x++) {
answer = answer * (x);
}
if (op == 's') {
answer = 0;
for (x = num1; x <= num2; x++) {
answer = …Run Code Online (Sandbox Code Playgroud)