草庐IT

C++浮点精度

全部标签

c++ - std::string 到 float (通过 std::stof)精度

我正在尝试解决这个问题,市场数据以字符串形式返回货币值,该字符串在数字长度后8位。money="124.19000540"我需要它是124.19,知道如何实现吗?std::stof(money)=124.19000244如何克服这个问题? 最佳答案 浮点类型不适合保存货币值。如果您满足于四舍五入到美分,并将钱存储为美分的整数(这是最简单的解决方案之一),您可以这样做:longnumCents=static_cast(100*std::stof(money))这将进行“截断”舍入,它总是向下舍入。如果您想“四舍五入到最接近的美分”,请

c++ - 深度神经网络的图像识别精度,float 还是 double?

用于图像识别的神经网络可能非常庞大。可以有数千个输入/隐藏神经元,数百万个连接什么的会占用大量计算机资源。同时float通常是32位和doublec++64位,它们在速度上没有太大的性能差异,但使用float可以节省一些内存。有一个神经网络正在使用什么sigmoid作为激活函数,如果我们可以选择神经网络中的哪些变量可以是float或double哪个可以float以节省内存而不会使神经网络无法执行?虽然训练/测试数据的输入和输出绝对可以是float因为它们不需要double,因为图像中的颜色可以仅在0-255范围内,当归一化为0.0-1.0比例时,单位值为1/255=0.0039~1。隐

C++:计算给定范围内可能的浮点值的数量

我正在开发一个加密应用程序,使用Crypto++作为此应用程序的一个晦涩部分,我需要确定在特定数值范围内可以存在的唯一浮点值的最大数量。显然在现实中0和1之间存在无穷多个数字-但并非所有数字都可以用唯一的浮点值表示。我有一个最小浮点值和一个最大浮点值。我需要确定此范围内可能的浮点值的数量。这很棘手,因为浮点值间隔得越远,离0越远。例如,0和1之间的可能浮点值的数量与100,000和100,001出于我的目的,我希望计数也包括最小值和最大值。但是生成独占计数的算法同样有用,因为我可以根据需要简单地添加1或2。其他问题:如果0在范围内怎么办?例如,如果最小值为-2.0,最大值为正2.0,我

c++ - AVX计算精度

我写了一个程序来显示mandelbrot集。为了加快速度,我通过使用了AVX(实际上是AVX2)指令。header。问题是:AVX计算(double)的结果有伪影,它与使用“正常”double计算的结果不同。详细来说,有一个函数getIterationCount它计算直到mandelbrot序列超过4的迭代次数,或者如果序列在前N个步骤中不超过4,则假定该点包含在集合中。代码如下所示:#include"stdafx.h"#include#include#includeclassMandelbrotSet{public:intgetIterationCount(conststd::com

c++ - 将浮点除法分解为整数和小数部分

我正在尝试使用double进行整数除法+模运算(用于基于样条的插值),但是在使用std::floor和std::fmod.我一直在使用下面的div1的等价物,但是在50时它产生了不正确的结果(也就是说,整数部分是3,但模数部分是除数减去epsilon)。div2有效但相当复杂。div3至少是一致的,但没有返回我想要的结果类型(余数可能是负数,所以在我可以使用它之前需要进一步的操作)。#include#includestd::pairdiv1(intnum,doubledenom){doublewhole=std::floor(num/denom);doubleremain=std::f

c++ - 节拍器精度算法数学

简而言之:我有一个每秒调用44,100次的方法。我想知道在我需要在第13781.25次方法调用时发出声音的情况下该怎么做-那是每分钟192次)。我可以选择舍入该数字并在第13781次方法调用时发出声音滴答声,这意味着我在0.25处发出声音滴答声太早了。这相当于早了0.00000566893424秒。在100个ticks之后,我确信延迟肯定会增加。是否有任何聪明的解决方法可以跟踪延迟,当延迟超过某个点时,也许±一些数字可以让节拍再次回到正轨?到目前为止,这是我的代码......intcounter;//usedtotrackdowntheamountoftimesthemethodhas

c++ 从 3 个浮点值生成 unordered_map 的键

我真的不明白:我正在读取二进制文件中的点,每个点都包含3个浮点值。将这些点保存在unordered_map中因此我尝试从这3个浮点值中创建一个键:初衷:只需使用确切的位作为key:unordered_map>points;stringvecToKey(float*a){charbytes[12];memcpy(bytes,a,12);returnstring(bytes);}关键是我绝对想用这种方式消除相同的点但是在一个示例项目中读取了大约21374点map结果大小=10640点使用以下方法作为key创建会产生正确的结果共10687点stringvec3ToKey(floata[3])

c++ - 如何在当前时间的打印输出中获得更高的精度(几分之一秒)?

我已经尝试了几种方法来从system_clock打印出时间,但除了整秒之外我什么也得不到:system_clock::time_pointnow=system_clock::now();std::time_tnow_c=system_clock::to_time_t(now);std::coutnow()函数实际上保存的是高精度数据,还是我只是找不到提取该信息进行打印的函数?注意:我不打算计算时间间隔。我想要几分之一秒的当前时间,并通过cout将其打印出来。我只是找不到办法做到这一点。我知道std::chrono::high_resolution_clock但也看不到打印出它的now(

提高多旋翼无人机的悬停控制精度

要提高多旋翼无人机的悬停控制精度,可以从以下几个方面进行优化:优化传感器配置:选用高精度的传感器,如激光雷达、红外传感器等,可以提供更准确的姿态和位置信息。同时,对传感器进行定期标定和校准,确保其准确性。改进控制算法:采用更为先进的控制算法,如鲁棒控制、自适应控制等,可以提高无人机的抗干扰能力和响应速度,从而提升悬停精度。提高通信稳定性:优化无人机与地面控制站之间的通信协议,提高数据传输的稳定性和实时性,可以降低因通信延迟导致的控制误差。强化学习与智能控制:通过机器学习技术,让无人机不断在实践中学习如何优化自身的悬停性能,实现智能化控制。动力学建模与优化:对多旋翼无人机的动力学模型进行更深入的

java - 如何在浮点二进制中查看数字表示

例如,我有数字0.1:doublen=0.1;它在IEEE-754bigendian中表示为:0011111110111001100110011001100110011001100110011001100110011010如何以这种二进制格式输出0.1? 最佳答案 Float类可以为您调用方法Float.floatToIntBitsfinalintintBits=Float.floatToIntBits(4.1f);finalStringbinary=Integer.toBinaryString(intBits);System.ou