草庐IT

floating-point-conversion

全部标签

c++ - 对 "same"类型转换的不同结果感到困惑, float 到 int

如果我先将一个值分配给一个变量的浮点计算,然后将其分配给一个带有隐式类型转换的unsignedint,我得到一个答案。但是,如果我将相同的计算直接分配给unsignedint,再次使用隐式类型转换,我会得到不同的答案。下面是我编译并运行来演示的示例代码:#includeintmain(intargc,char**argv){floatpayloadInTons=6550.3;//Above,payloadInTonsisgivenavalue.//Below,twodifferentwaysareusedtotypecastthatsamevalue,//buttheresultsdo

c++ - 将 float 转换为 double

将float转换为double的代价是多少?它是否像int到long的转换一样微不足道?编辑:我假设一个平台,其中float是4个字节,double是8个字节 最佳答案 平台注意事项这取决于用于float计算的平台。对于x87FPU,转换是免费的,因为寄存器内容是相同的——您有时可能付出的唯一代价是内存流量,但在许多情况下甚至没有流量,因为您可以简单地使用该值而无需任何转换。x87在这方面实际上是一个奇怪的野兽-很难正确区分float和double,因为使用的指令和寄存器是相同的,不同的是加载/存储指令和计算精度本身是使用状态位控制

c++ - 将整数存储为 float

假设我有一个API只允许我存储float或float数组。但是,我想在这里存储整数值。我(大致)理解我可以接受高达2^23左右的直接转换,但如果我想更高怎么办?有什么方法可以利用float的更多32位并确保我会得到相同的数字?为了澄清:我正在使用Pixar的PRMan(即RenderMan)对点云进行一些操作。我可以用C或C++编写链接预编译点云API。PRMan在任何时候都不必使用我存储的这些整数;我只需要它在对附加到这些点的其他数据进行操作后将它们原封不动地交还给我。 最佳答案 有疑问的:在C中,您可以执行以下操作,这可能是不安

c++ - 如何将分数纪元时间戳( double )转换为 std::chrono::time_point?

我有一个小数纪元时间戳,表示为double,我想将其转换为适当的std::chrono::time_point。纪元是自1/1/1970以来的常用UNIX纪元。我知道存在std::chrono::system_clock::from_time_t,但是time_t没有小数部分。使用C++11方法执行此操作的最佳方法是什么?这个问题与unixtimestamptoboost::posix_time::ptime有关,除了它要求的是C++11而不是它的Boost版本。 最佳答案 假设纪元与已知的时钟类型相同,您可以使用具有double表

c++ - C++11 类型推断如何决定 float 或 double ?

考虑这个类型推断的例子:autovar=1.0;在C++11类型推断下,它的计算结果是float还是double?可以控制这种行为吗? 最佳答案 它将被评估为double是的,您可以控制它。在标准ISO-14882:2011中,2.14.4float文字,第1点:Thetypeofafloatingliteralisdoubleunlessexplicitlyspecifiedbyasuffix.ThesuffixesfandFspecifyfloat,thesuffixeslandLspecifylongdouble.Ifthes

c++ - 比 double 更精确的 float 据类型?

在我的项目中,我必须计算double元素矩阵的除法、乘法、减法和加法。问题是,当矩阵的大小增加时,我的输出精度会受到极大影响。目前,我对每个元素使用double,我认为它使用8字节的内存并且具有16位的精度,无论小数点位置如何。即使对于大尺寸矩阵,所有元素占用的内存也在几千字节的范围内。所以我可以负担得起使用需要更多内存的datatypes。所以我想知道哪种数据类型比double更精确。我试着在一些书中搜索,我可以找到longdouble。但我不知道它的精度是多少。如果我想要比这更高的精度怎么办? 最佳答案 根据维基百科,80位“I

c++ - 如何检查一个 float 是否是 C++ 中的真实数字?

如何检查float是否为真数?即:不是无穷大,负无穷大,NaN...floatf;??? 最佳答案 比std::fpclassify()更简单的是使用std::isfinite()Determinesifthegivenfloatingpointnumberarghasfinitevaluei.e.itisnormal,subnormalorzero,butnotinfiniteorNaN. 关于c++-如何检查一个float是否是C++中的真实数字?,我们在StackOverflow上

c++ - 精确为零的 float / double 相等

我有一个算法,它使用floats或doubles来执行一些计算。例子:doublea;doubleb;doublec;...doubleresult=c/(b-a);if((result>0)&&(result现在,我担心(b-a)可能为零。如果它接近于零但不为零,那没关系,因为result将超出有用范围,而且我已经检测到(如(b-a)接近零,result将接近+/-inf,这不在范围0-small_number...)但是如果(b-a)的结果恰好为零,我预计由于被零除会发生一些依赖于平台的事情。我可以将if语句更改为:if((!((b-a)==0.0))&&((result=c/(b

c++ - 将 steady_clock::time_point 转换为 time_t

我正在使用steady_clock来保存一些消息的时间戳。出于调试目的,拥有日历(或类似的东西)很有用。对于其他时钟,有静态函数to_time_t,但在GCC(MinGW4.8.0)上,此函数不存在。现在我打印类似的东西:Timestamp:26735259098242对于时间戳,我需要一个steady_clock,所以我不能使用system_clock或其他。编辑之前的打印是从time_since_epoch().count()给出的 最佳答案 假设您需要内部计算的稳定行为,而不是显示,这里有一个函数可用于转换为time_t以供显

c++ - 将 float 舍入为 n 位有效数字的 C 例程?

假设我有一个float。我想将它四舍五入到一定数量的有效数字。在我的例子中n=6。所以说float是f=1.23456999;round(f,6)会得到1.23457f=123456.0001会得到123456有人知道这样的套路吗?它在网站上有效:http://ostermiller.org/calc/significant_figures.html 最佳答案 将数字乘以合适的比例因子,将所有有效数字移至小数点左侧。然后四舍五入最后反转操作:#includedoubleround_to_digits(doublevalue,intd