简体   繁体   English

double,long double,float和float128的比较?

[英]Comparison of double, long double, float and float128?

Why is there no difference between double, long double or float? 为什么双精度,长双精度或浮点型没有区别?

For instance, the computation of pi in C++ is, 例如,在C++pi的计算是

#include <iostream>
#include <quadmath.h>
#include <math.h> 

int main()
{
  float  PI0 = acos(-1.0);
  double PI1 = acos(-1.0);
  long double PI2= acos(-1.0L);

  __float128 x = acos(-1.0);
  char buf[128];
  quadmath_snprintf (buf, sizeof buf, "%*.34Qf",10, x);


  std::cout << "Float=" << PI0 << std::endl;
  std::cout << "Double=" << PI1 << std::endl;
  std::cout << "LongDouble=" << PI2 << std::endl;
  std::cout << "Float128=" << buf << std::endl;

}

In the terminal: 在终端中:

g++ -std=c++14 FileName.cpp -Wall -pedantic -lquadmath && ./a.out 

Output: 输出:

Float=3.14159
Double=3.14159
LongDouble=3.14159
Float128=3.1415926535897931159979634685441852

For detail: https://msdn.microsoft.com/en-us/library/cc953fe1.aspx 有关详细信息: https : //msdn.microsoft.com/en-us/library/cc953fe1.aspx

My platform does not have a __float128, but here's an example showing output by precision with float, double, and long double: 我的平台没有__float128,但是以下示例显示了带有float,double和long double的精度输出:

#include <cmath> 
#include <iomanip>
#include <iostream>
#include <limits>

int main()
{
  float PI0 = std::acos(-1.0F);
  double PI1 = std::acos(-1.0);
  long double PI2 = std::acos(-1.0L);

  constexpr auto PI0_max_digits10 = std::numeric_limits<decltype(PI0)>::max_digits10;
  constexpr auto PI1_max_digits10 = std::numeric_limits<decltype(PI1)>::max_digits10;
  constexpr auto PI2_max_digits10 = std::numeric_limits<decltype(PI2)>::max_digits10;

  std::cout << "Float=" << std::setprecision(PI0_max_digits10) << PI0 << std::endl;
  std::cout << "Double=" << std::setprecision(PI1_max_digits10) << PI1 << std::endl;
  std::cout << "LongDouble=" << std::setprecision(PI2_max_digits10) << PI2 << std::endl;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM