相关疑难解决方法(0)

long double(特定于GCC)和__float128

我正在寻找的详细信息long double,并__float128在GCC/86(更多的是出于好奇不是因为的实际问题).

很少有人可能会需要这些(我只是,这是第一次真正需要的double),但我想你知道你的工具箱里有什么以及它的含义仍然值得(而且很有趣).

有鉴于此,请原谅我有些开放的问题:

  1. 有人可以解释这些类型的实现原理和预期用法,也可以相互比较吗?例如,它们是"尴尬实施",因为标准允许类型,有人可能会抱怨,如果它们只是相同的精度double,或者它们是否属于一流类型?
  2. 或者,有人有一个好的,可用的网络参考分享?谷歌搜索"long double" site:gcc.gnu.org/onlinedocs没有给我很多真正有用的东西.
  3. 假设常见的口头禅"如果你认为你需要加倍,你可能不理解浮点"不适用,即你真的需要更多的精度而不仅仅是float,并且不关心是8或16字节的内存是烧毁...是合理的期望,人们可以也只是跳long double__float128代替double无显著的性能影响?
  4. 当值在内存和寄存器之间移动时,英特尔CPU的"扩展精度"功能一直是令人讨厌的惊喜的源头.如果实际存储了96位,则该long double类型应该消除此问题.另一方面,我理解long double类型是互斥的-mfpmath=sse,因为SSE中没有"扩展精度"这样的东西.__float128另一方面,SSE数学应该可以完美地工作(尽管没有四分之一精度指令肯定不适用于1:1指令库).我对这些假设是对的吗?

(3.和4.可能可以通过花费在分析和反汇编上的一些工作来解决,但也许其他人之前有过相同的想法,并且已经完成了这项工作.)

背景(这是TL; DR部分):
我最初绊倒了long double,因为我一直在寻找起来DBL_MAX<float.h>,并incidentially LDBL_MAX是在下一行."哦,看,GCC实际上有128位双打,不是我需要它们,但是......很酷"是我的第一个念头.惊喜,惊喜:sizeof(long double)回报12 ......等等,你的意思是16?

毫不奇怪,C和C++标准没有给出类型的非常具体的定义.C99(6.2.5 10)表示数字doublelong doubleC++ 03状态(3.9.1 8)的一个子集,long double其精度至少与double(同样的,只是措辞不同)相同.基本上,标准把一切的实现,以同样的方式与long, …

gcc long-double

28
推荐指数
2
解决办法
2万
查看次数

更精确的浮点数据类型比双倍?

在我的项目中,我必须在double元素矩阵上计算除法,乘法,减法和加法.问题是,当矩阵的大小增加时,我的输出的准确性会受到严重影响.目前我正在使用double我认为使用8 bytes内存的每个元素并且具有16 digits与小数位无关的精度.即使对于大尺寸的矩阵,所有元素占用的存储器也在几千字节的范围内.所以我可以负担得起datatypes需要更多内存的东西.所以我想知道哪种数据类型更精确double.我尝试在一些书中搜索,我可以找到long double.但我不知道它的精确度是多少.如果我想要比这更精确怎么办?

c++ types

9
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×1

gcc ×1

long-double ×1

types ×1