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
中间计算会将所有舍入和精度损失推回到转换回float
或int
.
混合模式算术(不同类型和/或大小的操作数之间的算术)是合法但易碎的.C标准定义了类型提升的规则,以便将操作数转换为公共表示.自动类型提升允许编译器对混合模式操作做一些合理的事情,但"明智"并不一定意味着"正确".
要真正了解行为是否正确,您必须首先了解促销规则,然后了解数据类型的表示.在很笼统:
float
to double
,short
to int
等)是否喜欢代码x > y
(其中x
,并y
有不同的类型)是对还是错取决于价值x
和y
可以采取.根据我的经验,通常的做法是禁止(通过编码标准)隐式类型转换.程序员必须考虑上下文并明确执行必要的任何类型转换.
归档时间: |
|
查看次数: |
45560 次 |
最近记录: |