如何将双精度转换为标准'long double'

How to convert double to 'long double' as standard

本文关键字:long double 标准 双精度 转换      更新时间:2023-10-16

如何将double转换为long double作为C++标准。我认为这样选角不是正确的方式吗?

double value = 1.2;
long double newValue = (long double)value;

这会很好,但不会神奇地在newValue中创建额外的精度。也就是说,它不会产生与相同的结果

long double newValue = 1.2L;

这将使CCD_ 4更接近1.2。

标准保证long double可以支持double可以支持的所有值(或者,换句话说,double可以支持的值集是long double可以表示的值的子集)。

因此,任务

long double newValue = value;

尽管涉及valuedoublelong double的隐式转换而不是显式转换。这是一种不会丢失精度的转换。

C++中的显式替代方案是

long double newValue = (long double)value;    // as in original question
long double newvalue = static_cast<long double>(value);

这实际上是一个主观风格的问题,哪种选择被认为更好,因为它们都能达到相同的效果,而不会潜在地失去准确性。

请注意,如果采用另一种方式(从long double转换为double),通常最好使用显式转换,因为转换可能会失去精度(因此可能会更改值)——这就是为什么编译器经常(可以配置为)对这种隐式转换发出警告的原因。

使用static_cast:

long double newValue = static_cast<long double>(value);

或者在C++11风格中:

auto newValue = static_cast<long double>(value);

(被称为"显式类型初始化程序习语")。