草庐IT

floating-point-conversion

全部标签

c++ - 如何在 Gnu C++ (g++) 中使用十进制 float ?

GCC4.5在运行时库(http://gcc.gnu.org/gcc-4.5/changes.html)中添加了对十进制float的支持。我能够编译代码,包括使用命名空间std::decimal,然后在代码中使用decimal64等等。不幸的是,我缺少一些用于链接代码的库。我一直无法找出应该需要哪些库。在gcc中启用DFP支持(--enable-decimal-float=dpd)此外,是否应该有一些在代码中提供十进制文字的快速方法?快速是指由模板处理并在编译时翻译的用户定义文字。我不想提供在运行时转换的double(尽管性能和我真的无法忍受将评估从编译时移动到运行时的事实仍然存在舍入

c++ - 将 float* 转换为 std::complex<float>* 是否合法

N379726.4[complex.numbers]说这是关于类型转换std::complex*至T*4Moreover,ifaisanexpressionoftypecvstd::complex*andtheexpressiona[i]iswell-definedforanintegerexpressioni,then:-reinterpret_cast(a)[2*i]shalldesignatetherealpartofa[i],and-reinterpret_cast(a)[2*i+1]shalldesignatetheimaginarypartofa[i].这(或标准的其他措辞

c++ - 为什么 C++ 在将 float 转换为 char 时不显示缩小转换错误?

使用g++-std=c++17-Wall-pedanticmain.cpp编译此代码不会产生任何警告:#include#includeintmain(intargc,charconst*argv[]){for(inti=0;i它不应该产生缩小误差吗? 最佳答案 我做了一些研究,发现-Wall不会警告类型转换问题。相反,使用标志-Wconversion以获得有关潜在类型转换问题的警告。备注:对于VC++的用户,/W4会在类型转换时警告你可能丢失数据 关于c++-为什么C++在将float转

c++ - 如何在 C++ 中从 void* 数组中有效地解压 float、int16、int32 等数据?

我有一组PCM数据;它可以是16位、24位打包、32位等。它可以是有符号的,也可以是无符号的,可以是32位或64位float。它当前存储为void**矩阵,首先按channel索引,然后按帧索引。目标是让我的库接受任何PCM格式并对其进行缓冲,而无需对数据进行操作以适应指定的结构。如果A/D转换器吐出交错PCM的24位打包数组,我需要优雅地接受它。我还需要支持16位非交错,以及上述格式的任何排列。我知道运行时的位深度和其他信息,并且我正在尝试高效编码而不重复代码。我需要的是一种有效的方法来转换矩阵,将PCM数据放入矩阵,然后再将其拉出。我可以将矩阵转换为int32_t或int16_t分

c++ - 80 位 float 和次正规数

我正在尝试将一个80位扩展精度float(在缓冲区中)转换为double。缓冲区基本上包含x87寄存器的内容。Thisquestion帮助我开始,因为我对IEEE标准不是很熟悉。无论如何,我正在努力寻找有关80位格式的次正规(或非正规化)数字的有用信息。我所知道的是,与float32或float64不同,它在尾数中没有隐藏位(没有隐含的1.0加法),因此了解数字是否被归一化的一种方法是检查尾数中的最高位是否已设置.这给我留下了以下问题:根据维基百科告诉我的内容,float32和float64表示一个次正规数,其(有偏)指数为0且尾数非零。80位float告诉我什么?尾数或者,指数为0的

c++ - std::string 到 std::chrono time_point

我有以下时间格式的字符串:“%Y-%m-%d%H:%M:%S.%f”其中%f是毫秒,例如:14:31:23.946571我想把它作为chronotime_point。有Actor阵容吗? 最佳答案 std::string没有转换至std::chrono::time_point.你必须建立std::chrono::time_point对象。使用除微秒以外的所有内容来构造std::tm对象()。年份应基于1900,而不是0。月份应基于0,而不是1。使用std::mktime()创建一个std::time_t目的。创建std::chron

c++ - SIMD 常量 float

我一直在尝试使用Microsoft的sseintrinsic优化一些代码。优化我的代码时最大的问题之一是每当我想使用常量时都会发生LHS。似乎有一些关于生成某些常量(here和here-section13.4)的信息,但它是所有程序集(我宁愿避免)。问题是当我尝试用内在函数实现同样的事情时,msvc提示类型不兼容等。有谁知道使用内在函数的任何等效技巧?示例-生成{1.0,1.0,1.0,1.0}//pcmpeqwxmm0,xmm0__m128t=_mm_cmpeq_epi16(t,t);//pslldxmm0,25_mm_slli_epi32(t,25);//psrldxmm0,2re

c++ - 如何在没有科学计数法或尾随零的情况下将 float 输出到 cout?

在C++中输出没有科学记数法或尾随零的float的最优雅方法是什么?floata=0.000001f;floatb=0.1f;cout 最佳答案 我不确定“最优雅的方式”,但这是一种方式。#include#include#includeusingnamespacestd;stringfix(floatx,intp){ostringstreamstrout;strout你也许可以createyourownI/Omanipulator如果您需要大量此类输出。这可以说更优雅,但实现可能类似。

c++ - 为什么 int/float 乘法会导致不同的结果?

如果我像下面这样将一个float和一个整数相乘,为什么所有乘法都会导致不同的结果?我的期望是一致的结果。我认为在这两种情况下,int值在乘法之前都会隐式转换为float。但是好像有区别。这种不同处理的原因是什么?intmultiply(floatval,intmultiplier){returnval*multiplier;}intmultiply2(floatval,intmultiplier){returnfloat(val*multiplier);}floatval=1.3f;intresult0=val*int(10);//12intresult1=1.3f*int(10);/

c++ - "Conversion"从类型到相同类型导致错误

我有一个模板函数,其中枚举类型转换为它的底层类型,工作正常,但我写了一个重载,它应该接受一个整数并返回它自己,它给我一个错误,指出int不是枚举类型。在我的模板中,这应该已经被过滤掉了。怎么了?模板代码如下:templatestaticconstexprautoget_value(TTt)->typenamestd::enable_if::value,TT>::type{returnt;}templatestaticconstexprautoget_value(TTt)->typenamestd::enable_if::value,typenamestd::underlying_typ