长浮子和双浮C++有什么区别?

What's the difference between LONG float and double in C++?

本文关键字:什么 区别 C++      更新时间:2023-10-16

所以我知道浮点数和双精度数的精度有很大的不同。我明白了。承诺。

但是,在c++中,当调用scanf和printf时,用于指定双精度浮点数的符号是"%lf",它代表长浮点数,对吗?因此,虽然float比double精度低,但LONG float(可能被称为LONG float,因为它可以通过拥有更多项而"更长")具有相同的精度,因此本质上是相同的东西?

澄清一下,我的意思是:

double number = 3.14159;
printf("The number is %lf", number);

所以我的问题的根源:长float是double的另一个名字吗?

据我所知,没有long float这种类型。

这篇文章告诉你为什么人们用lf打印doubleprintf,如果这是你困惑的原因。

由@Jerry Coffin提供:

"%f"是(或至少是"a")正确的双精度类型格式。float没有格式,因为如果你试图传递一个float给printf,它会在printf接收到它之前被提升为double。 "%lf"在当前标准下也是可以接受的——如果后面跟着f转换说明符(以及其他),则l被指定为没有效果。

所以原因是当人们这样做的时候:

 printf("The number is %lf", number);

相当于做:

printf("The number is %f", number); //l has no effect when printing double

printf说明符名称与类型名称没有任何共同之处。

这样命名是为了使它们更短,更容易记住。

float -> double -> long - double

%f -> %f -> %f

(同样,他们不能将printf双说明符命名为%d,因为该名称已经为int的十进制表示保留(与八进制%o相比))

@taocp的答案解释了为什么您可以将%f%lfprintf一起使用,但请注意,您不能使用scanf

long float是存在的K& C第一版类型。它是double的同义词。

在第一个标准C89/C90之后,long float被移除。不建议使用。C89/C90也是K&R C第二版。然后是被称为C94/C95的多语种修正案,它增加了wchar_t以及<iso646.h>等功能。

K&R C第一版的许多特性已弃用,但直到第二个标准C99才被删除。从C99中删除了自动返回类型为int,并删除了默认形参类型为int和double。C99标准要求函数原型,而不是函数声明,即int function_declaration();int function_prototype(void);。它还删除了K&R C风格的原型。

// implicit int type
main(argc, argv)
char ** argv;
// explicit int type
int main(argc, argv)
int argc;
char ** argv;

c++早在C标准化之前就开始了。模板是在1983年标准化的,这使得编译成C代码变得更加困难。直到1998年才标准化。旧的编译器可能会弃用那些被更现代的编译器删除的旧特性。

%lflong float的遗产,它被继承到C的标准库中。

对于scanf,传递一个指向结果存储位置的指针;用%f读取float值,用%lf读取双精度值;您必须区分它们,因为floatdouble不需要具有相同的表示。对于printf,你传递要显示的值,而float的值被提升到double,因为它们作为参数传递到原型的...部分;也就是说,对于printf, floatdouble之间没有区别,所以%f%lf做同样的事情。