gpt4 book ai didi

C unsigned long long 误算

转载 作者:行者123 更新时间:2023-11-30 18:13:54 26 4
gpt4 key购买 nike

我什至不知道如何命名这个问题,所以首先我将展示一些代码:

void hsvm2dcd72f(const hsvm_t *src, dcd72f_t *result, unsigned long long range)
{
int h, s, v;
int kh, ks, kv;
int i;
int indexes[72];
int values[72];
unsigned long long sum = 0;
unsigned long long temp = 0;

for (i = 0; i < 72; i++)
{
result->values[i] = 0;
values[i] = 0;
}

for (i = 0; i < src->length; i++)
{

h = (int) src->content[i].h;
s = (int) src->content[i].s;
v = (int) src->content[i].v;

// kwantyzacja H
if ((h >= 316) || (h < 20))
kh = 0;
else if ((h >= 20) && (h < 40))
kh = 1;
else if ((h >= 40) && (h < 75))
kh = 2;
else if ((h >= 75) && (h < 155))
kh = 3;
else if ((h >= 155) && (h < 190))
kh = 4;
else if ((h >= 190) && (h < 270))
kh = 5;
else if ((h >= 270) && (h < 295))
kh = 6;
else if ((h >= 295) && (h < 316))
kh = 7;

// kwantyzacja S
if ((s >= 0) && (s <= 20))
ks = 0;
if ((s > 20) && (s <= 70))
ks = 1;
if ((s > 70) && (s <= 100))
ks = 2;

//kwantyzacja V
if ((v >= 0) && (v <= 20))
kv = 0;
if ((v > 20) && (v <= 70))
kv = 1;
if ((v > 70) && (v <= 100))
kv = 2;

values[9 * kh + 3 * ks + kv]++;
}

quicksorti((int*) &indexes, (int*) &values, 72);

//norm
for (i = 72 - 8; i < 72; i++)
sum += (unsigned long long) values[indexes[i]];

unsigned long long temp1 = 65535;
temp = (unsigned long long) range;
if(temp == temp1)
printf("ok");
for (i = 72 - 8; i < 72; i++)
{
result->values[indexes[i]] = values[indexes[i]]*temp1 / sum;
}
}

struct dcd72f // result struct
{
unsigned long long values[72]; /**< dcd descriptor values. */
};
typedef struct dcd72f dcd72f_t;

比较后显示“ok”,因此 temp1 和 temp 相等(这是我的目标),但根据变量,我在 result->values[indexes[i]]< 中得到不同的结果,带有 temptemp1temp1 结果是正确的,但我需要 temp 具有灵 active 。

我在 Windows 上使用 GCC 和 eclipse。知道如何解决这个问题吗?

编辑:printf("%llu\n", temp);printf("%llu\n", temp1); 都返回 65535...

最佳答案

您从未比较过条件中的两个 float 。范围内的实数是无限的,但 float-double 不是。它有无限的空白,它们给你一个近似值。比较器 == 是二进制级别的。这一定是你的问题。

关于C unsigned long long 误算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20963539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com