为什么 double、long double 或 float 之间没有区别?
例如,计算pi
in C++
is,
#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
Output:
Float=3.14159
Double=3.14159
LongDouble=3.14159
Float128=3.1415926535897931159979634685441852
详细信息:https://msdn.microsoft.com/en-us/library/cc953fe1.aspx
我的平台没有 __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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)