我在Apple文档中找不到这个:这里的数字后面的"f"表示什么?这是来自C还是Objective-C?不将它添加到常数中有什么区别吗?
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
Run Code Online (Sandbox Code Playgroud)
你能解释一下为什么我不会写:
CGRect frame = CGRectMake(0, 0, 320, 50);
Run Code Online (Sandbox Code Playgroud) 我想知道C中这两个变量之间的区别是什么:
float price = 3.00;
Run Code Online (Sandbox Code Playgroud)
和
float price = 3.00f;
Run Code Online (Sandbox Code Playgroud)
尾随"f"?
有什么区别
float f = (float) 99.32 ;
Run Code Online (Sandbox Code Playgroud)
和
float f = 99.32f ;
Run Code Online (Sandbox Code Playgroud)
他们都编译成功并成功运行.
在C++中(或者只有我们的编译器VC8和VC10) 3.14
是双字面文并且3.14f
是浮点字面值.
现在我有一位同事说:
我们应该使用float-literals进行浮点计算,使用double-literals进行双重计算,因为在计算中使用常量时,这可能会影响计算的精度.
具体来说,我认为他的意思是:
double d1, d2;
float f1, f2;
... init and stuff ...
f1 = 3.1415 * f2;
f1 = 3.1415f * f2; // any difference?
d1 = 3.1415 * d2;
d1 = 3.1415f * d2; // any difference?
Run Code Online (Sandbox Code Playgroud)
或者,由我添加,甚至:
d1 = 42 * d2;
d1 = 42.0f * d2; // any difference?
d1 = 42.0 * d2; // any difference?
Run Code Online (Sandbox Code Playgroud)
更一般地,只有我可以看到用点2.71828183f
是确保我试图不断的指定实际上将放入一个浮动(编译错误/警告其他方式).
有人可以对此有所了解吗?你指定f
后缀吗?为什么?
从答案中引用我隐含的理所当然:
如果你正在使用float变量和double literal,整个操作将以double形式完成,然后转换回float.
可能有任何伤害吗?(除了非常非常理论的性能影响?) …
具有指数部分的浮点文字的类型是什么,例如123456e-3
在 C(99+) 中?它是类型float
还是double
?当用作float
初始化器时float f = 123456e-3;
,它需要有f
后缀吗?
f
在将常量分配给 a 时,将an应用于浮点常量似乎没有什么区别float
。
int main(void) {
float f;
// 1 2345678901234567
f = 3.1415926535897932;
printf("%.6a %.8f pi 3.1415926535897932\n", f, f);
f = 3.1415926535897932f; // v
printf("%.6a %.8f pi 3.1415926535897932f\n", f, f);
}
Run Code Online (Sandbox Code Playgroud)
有或没有f
,值是一样的
// value value code
0x1.921fb6p+1 3.14159274 pi 3.1415926535897932
0x1.921fb6p+1 3.14159274 pi 3.1415926535897932f
Run Code Online (Sandbox Code Playgroud)
为什么要使用f
?
这之间有区别吗(使用浮点文字后缀):
float MY_FLOAT = 3.14159265358979323846264338328f; // f suffix
double MY_DOUBLE = 3.14159265358979323846264338328; // no suffix
long double MY_LONG_DOUBLE = 3.14159265358979323846264338328L; // L suffix
Run Code Online (Sandbox Code Playgroud)
vs 这个(使用浮点转换):
float MY_FLOAT = (float)3.14159265358979323846264338328;
double MY_DOUBLE = (double)3.14159265358979323846264338328;
long double MY_LONG_DOUBLE = (long double)3.14159265358979323846264338328;
Run Code Online (Sandbox Code Playgroud)
在 C 和 C++ 中?
注意:函数调用也是如此:
void my_func(long double value);
my_func(3.14159265358979323846264338328L);
// vs
my_func((long double)3.14159265358979323846264338328);
// etc.
Run Code Online (Sandbox Code Playgroud)
下面两行代码有什么区别?
#define F_SAMP 10000.0f
#define F_SAMP 10000.0
两个不都浮起来吗?(顺便说一句,在这种特殊情况下,编译器是 XC16,但我认为这并不重要)感谢您的关注
我注意到所有数学常数都声明为double,这在某些不存在双精度单位的平台上导致转换问题。GCC标准库中是否有一个开关可以自动向下转换或使用单独的定义?
可能重复:
浮点比较
#include<stdio.h>
#include<conio.h>
int main()
{
float i=0.7;
clrscr();
if(i < 0.7)
printf("If Block");
else
printf("Else Block");
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不明白whay输出将是"If block".....请帮助为什么if部分被执行?
C/C++中双精度浮点值的符号是什么?
.5表示双值或浮点值?
我很确定2.0f被解析为一个浮点数而2.0作为一个双解析但是.5呢?