双倍、长双、浮子和浮子的比较128?
Comparison of double, long double, float and float128?
为什么双精度、长双精度或浮点数之间没有区别?
例如,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-us/library/cc953fe1.aspx
我的平台没有__float128,但这里有一个示例,显示了浮点数、双精度和长双精度的精度输出:
#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;
}
相关文章:
- 我想知道长双倍和双倍之间的区别
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- 按值 C++ 返回时进行双倍移动
- 求和 int 乘以双倍时的欠/过近似
- 从'size_t'转换为"常量双倍",可能会丢失数据
- 二叉搜索不收敛为双倍
- 将一个双倍值乘以10会发生什么
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 双吨级 - 从单级过渡到双倍级
- 如何将包含指数的 QString 转换为C++中的双倍?
- 防止在字符数组中输入双倍空格在 C++
- 将双倍转换为 LPARAM 的麻烦
- 现代计算机上的双倍和浮点内存分配
- 将 CSV 文件中的双倍值C++到矢量中
- 假设 a 是双倍的,2.0*a 比 2*a 快吗?
- 双倍、长双、浮子和浮子的比较128?
- 是新的(&*p)双倍;一个无操作。因此,uninitialized_default_construct是否也变得无操作?
- 将双倍*与双倍进行比较
- 双倍和NaN比较的结果是什么
- C++比较双倍