【发布时间】:2018-11-30 19:09:27
【问题描述】:
为什么double、long double、float没有区别?
比如pi在C++中的计算是,
#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
【问题讨论】:
-
这是一个表现问题。打印浮点值时尝试使用
std::setprecision。 -
另外,为了完全正确,您应该使用
float的acos重载P0。如float P0 = acos(-1.0f);。 -
double和long double可能是同一类型,具体取决于您的平台/编译器。您可以检查它们是否适合您static_assert(sizeof(double) != sizeof(long double)); -
double和long double,正如@Kaldrr 所说,在 Windows 上可以是相同的大小:msdn.microsoft.com/en-us/library/9cx8xs15.aspx -
你给
std::setprecision传递了什么值? wandbox.org/permlink/n8fCNPHYQimYEICm
标签: c++ floating-point arithmetic-expressions