相关疑难解决方法(0)

Qsort和Comparators奇怪的行为.C

所以,我在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并且它有效.除非我在那里遗漏了什么.

c sorting algorithm pointers

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

通过自己划分浮点产生非常大的整数

所以我觉得在我看来这是一个非常奇怪的问题.我有一个粗略的系统,用于在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)

c++ math sfml

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

有没有更优雅/聪明/简短的方法来使未知数字接近0?

基本上我正在研究物理游戏.需要减少侧向运动(如接近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的方法也不会有什么坏处

c++ math reduction simplification

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

不兼容的块指针类型将'int(^)(__ strong id,__strong id)'发送到'NSComparator'类型的参数

从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)

objective-c gpuimage xcode5.1

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

你能安全地检查无限的标志吗?

在过去,我们一直在使用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)?

注意:

  • 如果启用了fastmath,则独立
  • 以便携的方式

笔记2:

  • C++ 11适用

c++ floating-point

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

将其写在一行中:通过数字符号添加或减少

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)

可以选择一行吗?

c++

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

一种基于最大值包装/溢出数的算法

谁有挑战?我正在寻找一种有效的算法来实现一个固定最大值的数字的包装/溢出行为.

比如,最大可能的数值定义为:

#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溢出条件的方式.我想知道是否有一种快速有效的方法来实现这种包装?像位移或其他按位操作一样?

c c++ algorithm

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

如何优化此功能

嗨,我创建了这个功能,用于将游戏世界分成块.每个块大小为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)

math optimization integer

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

对于仅包含数学的整数,获得1,0,-1为正,零或负

我有一种情况,我正在对大量行进行计算,如果我可以避开条件语句,我可以真正提高性能.

我需要的是给定的正,零或负整数我想分别得到结果1,0,-1.

所以,如果我这样做col/ABS(col),我将获得1为正数,-1为负数,但当然如果col等于0,那么我将得到一个错误.我不能得到错误.

这看起来很简单,但我无法绕过它.

algorithm

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

如何在iOS中对已签名的数字进行排序?

这可能是一个简单的问题,但我不知道对有符号整数值数组进行排序的方法.

我的数组在排序之前,

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)

如何按上述格式排序?提前致谢.

sorting iphone objective-c nsarray ios

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

如何在OpenCV中实现signum功能?

dst = signum(src)函数将所有正元素的值设置为srcto 1,并将所有负元素的值设置为-1.

但是,似乎无法signum()通过应用OpenCV函数来实现该功能threshold().我也不想遍历src,因为它效率低下.

math android opencv

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

如何计算两个负整数之间的总和C ++

我创建了一个函数,该函数应该能够计算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)

c++

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