小编use*_*511的帖子

gcc -mno-sse2舍入

我正在做一个我做RGB转换为luma的项目,而且我对-mno-sse2标志有一些舍入问题:

这是测试代码:

#include <stdio.h>
#include <stdint.h>

static double rec709_luma_coeff[3] = {0.2126, 0.7152, 0.0722};

int main()
{
    uint16_t n = 242 * rec709_luma_coeff[0] + 242 * rec709_luma_coeff[1] + 242 * rec709_luma_coeff[2];

    printf("%u\n", n);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

而这就是我得到的:

user@gentoo>gcc -mno-sse2 test.c -o test && ./test
241
user@gentoo> gcc test.c -o test && ./test
242
Run Code Online (Sandbox Code Playgroud)

我想gcc使用sse2优化进行double乘法,但我没有得到的是为什么优化版本是正确的.

另外,您建议我使用什么来获得更一致的结果,ceil()或者floor()

c gcc compilation rounding sse2

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

与inttypes.h,fscanf(),fprintf()不一致

我有一些关于inttypes的问题,这里用这个小代码示例说明:

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>


void print_byte(uint8_t b)
{
    printf("%d%d%d%d%d%d%d%d\n",
        !!(b & 128), !!(b & 64), !!(b & 32), !!(b & 16),
        !!(b & 8), !!(b & 4), !!(b & 2), !!(b & 1));
}

int main()
{
    FILE *f;
    uint8_t bs = 8;
    uint16_t bw = 100, bh = 200;
    f = fopen("out", "w+");

    print_byte(bs);
    printf("%"PRIu8" %"PRIu16" %"PRIu16"\n", bs, bw, bh);
    fprintf(f, "%"PRIu8"%"PRIu16"%"PRIu16, bs, bw, bh);
    fclose(f);

    f = fopen("out", "r");

    fscanf(f, "%"SCNu8"%"SCNu16"%"SCNu16, &bs, &bw, &bh);   
    printf("%"PRIu8" …
Run Code Online (Sandbox Code Playgroud)

c scanf stdint

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

标签 统计

c ×2

compilation ×1

gcc ×1

rounding ×1

scanf ×1

sse2 ×1

stdint ×1