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

Comparison of double, long double, float and float128?(double、long double、float和float128的比较?)
本文介绍了double、long double、float和float128的比较?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么double、long double、float没有区别?

Why is there no difference between double, long double or float?

比如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;

}

在终端中:

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

输出:

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

详情:https://msdn.microsoft.com/en-我们/图书馆/cc953fe1.aspx

推荐答案

我的平台没有 __float128,但这里有一个例子,显示了 float、double 和 long double 的精度输出:

My platform does not have a __float128, but here's an example showing output by precision with float, double, and 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;
}

这篇关于double、long double、float和float128的比较?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Rising edge interrupt triggering multiple times on STM32 Nucleo(在STM32 Nucleo上多次触发上升沿中断)
How to use va_list correctly in a sequence of wrapper functions calls?(如何在一系列包装函数调用中正确使用 va_list?)
OpenGL Perspective Projection Clipping Polygon with Vertex Outside Frustum = Wrong texture mapping?(OpenGL透视投影裁剪多边形,顶点在视锥外=错误的纹理映射?)
How does one properly deserialize a byte array back into an object in C++?(如何正确地将字节数组反序列化回 C++ 中的对象?)
What free tiniest flash file system could you advice for embedded system?(您可以为嵌入式系统推荐什么免费的最小闪存文件系统?)
Volatile member variables vs. volatile object?(易失性成员变量与易失性对象?)