我可以比较一个浮点数并将其添加到C中的整数吗?

sev*_*der 19 c floating-point integer

我可以将浮点数与整数进行比较吗?

浮点数会与代码中的整数进行比较吗?

float f;     // f has a saved predetermined floating-point value to it  
if (f >=100){__asm__reset...etc}
Run Code Online (Sandbox Code Playgroud)

我还能......

float f;
int x = 100;
x+=f;
Run Code Online (Sandbox Code Playgroud)

我必须使用从姿态参考系统接收的浮点值f来调整控制PWM信号以校正姿态的位置值x.

pax*_*blo 21

第一个会很好.100将转换为浮点数,IEE754可以将所有整数表示为浮点数,最多约为2 23.

第二个也可以工作但是会先转换成整数,所以你将失去精度(如果你将浮点数转换为整数,这是不可避免的).


RBe*_*eig 10

既然你已经发现自己不熟悉浮点数的微妙之处,我将向大家引用David Goldberg的这篇高级论文:每个计算机科学家应该知道的关于浮点运算的内容(在Sun 重印).

在您被吓到之后,现实情况是,大部分时间浮点对于完成计算是一个巨大的好处.而现代编译器和语言(包括C)可以合理地处理转换,因此您不必担心它们.除非你这样做.

提出的关于精度的要点肯定是有效的.一个IEEE浮点有效地具有仅24的精度,这是小于32位的整数位.使用double中间计算会将所有舍入和精度损失推回到转换回floatint.

  • 我喜欢“除非你这样做”位:-) (2认同)

Mic*_*man 8

混合模式算术(不同类型和/或大小的操作数之间的算术)是合法但易碎的.C标准定义了类型提升的规则,以便将操作数转换为公共表示.自动类型提升允许编译器对混合模式操作做一些合理的事情,但"明智"并不一定意味着"正确".

要真正了解行为是否正确,您必须首先了解促销规则,然后了解数据类型的表示.在笼统:

  • 较短的类型转换为更长的类型(floatto double,shortto int等)
  • 整数类型转换为浮点类型
  • 有符号/无符号转换有利于避免数据丢失(有符号转换为无符号或反之亦然取决于相应类型的大小)

是否喜欢代码x > y(其中x,并y有不同的类型)是对还是错取决于价值xy可以采取.根据我的经验,通常的做法是禁止(通过编码标准)隐式类型转换.程序员必须考虑上下文并明确执行必要的任何类型转换.