如何将双精度转换为标准'long double'
How to convert double to 'long double' as standard
如何将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;
尽管涉及value
从double
到long 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);
(被称为"显式类型初始化程序习语")。
相关文章:
- cudaMallocManaged with vector<complex<long double> > C++ - NVIDIA CUDA
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量
- c++模板实例化可以使用int、long等,但不能使用float、double等
- Casting from (long)double to size_t
- 使用 GCC 和 C++11 实施类型 "long double"
- 如何将双精度转换为标准'long double'
- 为什么从无符号long-long转换为double会导致数据丢失
- C++无法将'long double'转换为'long double*',因为参数'1'为"long
- 在C++中,将double转换为long的类型返回了不正确的值
- Cout long double issue
- C++ winapi LONG to std double
- 警告:从'long int'转换为'double'可能会更改其值
- 将多边形坐标从Double转换为Long以用于Clipper库
- 为什么要使用float over double,或者double over long double
- 如何正确检查“double”或“long double”是否适合“long long”
- 函数定义中使用的两种数据类型to_string(long double _Val)
- "long double"一个字的名字吗?
- c++ fab (long double)编译器警告
- 何时使用 std::complex<long double> vs. 自己的复杂数据类型(结构等)
- 为什么数字字面值的后缀long int和long double都是l/ l ?