相关疑难解决方法(0)

浮动和双重比较最有效的方法是什么?

比较两个double或两个float值的最有效方法是什么?

简单地这样做是不正确的:

bool CompareDoubles1 (double A, double B)
{
   return A == B;
}
Run Code Online (Sandbox Code Playgroud)

但是像这样:

bool CompareDoubles2 (double A, double B) 
{
   diff = A - B;
   return (diff < EPSILON) && (-diff < EPSILON);
}
Run Code Online (Sandbox Code Playgroud)

似乎浪费处理.

有谁知道更聪明的浮动比较器?

c++ algorithm floating-point optimization

495
推荐指数
13
解决办法
39万
查看次数

为什么if(a == 2.3)在浮动a = 2.3时评估为假

#include<stdio.h>

void main()
{
    float a = 2.3;
    if(a == 2.3) {
        pritnf("hello");
    }
    else {
        printf("hi");
    }
}
Run Code Online (Sandbox Code Playgroud)

它在输出中打印"hi",或者我们可以说如果条件得到假值.

#include<stdio.h>

void main()
{
    float a = 2.5;
    if(a == 2.5)
        printf("Hello");
    else
        printf("Hi");
}
Run Code Online (Sandbox Code Playgroud)

打印你好.

c

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

嵌入式系统C中最快的阵列查找算法?

假设我有一个定义大小为22的常量浮点数,如下所示:

array[0]= 0;
array[1]= 0.5;
array[2]= 0.7;
array[3]= 1.8;
...
...
array[21]= 4.2;
Run Code Online (Sandbox Code Playgroud)

这个数组的值是单调的,也就是说,它们总是随索引而增加(array [0] <= array [1] <= array [2] <= .... <= array [21]).

我想要一个给定一个浮点数的函数,它找到数值的索引,其值正好在输入浮点数之下(因此,下一个索引的值紧接在上面)

例如,在前一种情况下,如果函数的输入值为0.68,则函数的输出应为1,因为数组[1] <= 0.68

现在,这很容易实现,但我正在处理嵌入式系统中代码的一个非常时间关键的部分,我真的需要一个非常优化的算法,它避免了循环(以避免开销).

我现在使用的最简单的方法就是用if-elses展开循环,就是这样.

例:

if(input >= array[size-1])
    return size-1;
else if(input>= array[size-2])
    return size-2;
else if(input >= array[size-3])
    return size-3;
...
...
Run Code Online (Sandbox Code Playgroud)

但这里的问题是我有抖动,因为不同输入的路径需要明显不同的时间.

所以我的问题是:是否有最快,更确定(更少抖动)的方式来实现它?

谢谢.乔治.

c arrays embedded algorithm

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

双重或浮动比较

我见过这样的帖子:

浮动和双重比较最有效的方法是什么?

比较两个花车

和许多其他相关的帖子.

我在d3js库中看到,它使用以下比较:

  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
Run Code Online (Sandbox Code Playgroud)

可以在C/C++中使用它来进行比较doublefloat吗?

c c++ floating-point

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

标签 统计

c ×3

algorithm ×2

c++ ×2

floating-point ×2

arrays ×1

embedded ×1

optimization ×1