相关疑难解决方法(0)

使C浮点文字浮动(而不是双重)

众所周知,在C中,浮点文字(例如1.23)具有类型double.因此,任何涉及它们的计算都会提升到两倍.

我正在研究一个嵌入式实时系统,它有一个浮点单元,只支持单个precision(float)数字.我的所有变量都是float,这个精度就足够了.我根本不需要(也买不起)double.但每次都喜欢

if (x < 2.5) ...
Run Code Online (Sandbox Code Playgroud)

写的,灾难发生:减速可以达到两个数量级.当然,直接的答案是写

if (x < 2.5f) ...
Run Code Online (Sandbox Code Playgroud)

但这很容易被遗漏(并且直到太晚才难以发现),尤其是当一个"配置"值被#define一个不那么自律(或刚刚开发)的开发人员放在一个单独的文件中时.

那么,有没有办法强制编译器将所有(浮点)文字视为float,就像使用后缀一样f?即使它违反了规范,我也不在乎.或任何其他解决方案?顺便说一句,编译器是gcc.

c floating-point gcc literals

70
推荐指数
2
解决办法
9055
查看次数

Linux gcc(5.4.0)中的浮点数是否符合IEEE754规则?

我的编程环境是gcc版本5.4.0 20160609(Ubuntu 5.4.0-6ubuntu1~16.04.4)

我的代码如下:

#include <stdio.h>

typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start, int len){
  int i;
  for (i = 0; i<len; i++)
    printf(" %.2x", start[i]);
  printf("\n");
}

void show_float(float x){
  show_bytes((byte_pointer)&x, sizeof(float));
}

int main(){
  int y = 0xffffff;
  float f = y;
  show_float(f);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

并且机器给出了结果: 00 00 00 e0

根据IEEE 754,我认为这是不对的; 但我不知道为什么.虽然Windows 2013中的VS 2013中的相同代码给出了正确的答案:ff ff 7f 4b

gcc 5.4.0不采用IEEE 754吗?或者我的代码中有问题吗?

c linux floating-point gcc ieee-754

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

标签 统计

c ×2

floating-point ×2

gcc ×2

ieee-754 ×1

linux ×1

literals ×1