草庐IT

floating_bond

全部标签

c++ - 关于 float 舍入错误

我不明白以下程序的输出:intmain(){floatx=14.567729f;floatsqr=x*x;floatdiff1=sqr-x*x;doublediff2=double(sqr)-double(x)*double(x);std::cout输出:6.63225e-0066.63225e-006我使用VS2010,x86编译器。我希望得到不同的输出06.63225e-006为什么diff1不等于0?为了计算sqr-x*x,编译器将浮点精度提高到两倍。为什么? 最佳答案 浮点寄存器是80位(在大多数现代CPU上)在表达式中,结

c++ - 模板 - 必要时使用 int、short 或 float 的类

我想编写一个类来管理欧几里德vector并使用短整型、整型、长整型或浮点型存储其初始点。我想创建一个这样的模板:templateclassEVector{private:unitx;unity;public:EVector();setX();setY();};因此,用户创建了一个选择合适原始类型的EVector。但是如何实现不同类之间的操作,例如EVectora;EVectorb;EVectorc;c=a+b;operator=将复制坐标,operator+添加它们。 最佳答案 此外,您可以使用我的promote实现:templat

C++:清除单精度 float 的位

我目前正在将一个最初用于OpenCL的程序转换为C++,但我在其中的一个特定部分遇到了一些麻烦。上述程序中常用的表达式之一涉及采用32位float,将其转换为整数(即​​实际上不是将其四舍五入为int,而是将相同的数据解释为int-想想reinterpret_cast),执行一些操作对它施展魔法,然后将其转换回float(再一次,不是实际转换,而是对相同数据的重新解释)。虽然这在OpenCL中运行良好,但对于C++和gcc,这违反了严格的别名规则,如果启用优化会破坏程序,并且根据架构,可能涉及昂贵的加载命中存储,因为浮点寄存器和整数寄存器是分开的。我已经能够有效地避免这些表达式中的大部

c++ - 如何在没有 float / double 的情况下生成均匀分布和高斯分布的伪随机数?

我必须在没有任何float/double操作和函数的汇编器上编写伪随机生成器,例如sin/cos、sqrt等。所以我不能用一般的方法来做到这一点。我也有随机数限制:00-0F。我该怎么做?据我了解,我首先需要生成统一编号。我是这样做的:x=(13*x+7)%16;(但它有一个问题-这是有史以来最统一的分布。如果它生成15个数字并且我知道所有这些数字,我可以100%的概率说第16位,因为在16(模块)的周期中没有重复。然后,我需要将这些数字重新生成为高斯分布。我在互联网上找到了这个解决方案,但它不起作用。for(i=0;i我应该用它做什么?(我对概率论一窍不通)我得到gx和gy的输出:U

c++ - 在 float 中获取计时秒数

在http://en.cppreference.com/w/cpp/chrono的示例中秒值是在double中获得的。这是我想要的行为。然而,这似乎依赖于时间点减法产生代表秒的值的隐含假设。我找不到任何内容来解释为什么在实际未指定时间单位时持续时间会产生浮点秒数。根本不使用auto,有人可以展示如何显式获取浮点类型的时间单位(例如秒),或者向我指出有关为什么上述转换代表秒的文档或解释吗?有问题的转换本质上是:std::chrono::time_pointstart=std::chrono::system_clock::now();std::chrono::time_pointend=s

c++ - 如何从两个字节组装一个 float ?

我目前正在做一个项目,我需要读出一个DHT11humidityandtemperaturesensor.MCU和串行设备之间的通信非常低级,但我设法将测量值(湿度+温度)作为长度为4的字节数组接收(第5个字节是校验和):我从DHT11传感器收到的值:-byte[0]=humidityintegerpart-byte[1]=humiditydecimalpart-byte[2]=temperatureintegerpart-byte[3]=temperaturedecimalpart-byte[4]=checksumofthefirstfourbytes我现在想将byte[0]和byte

c++ - 将 8 个字符从内存加载到 __m256 变量中作为打包的单精度 float

我正在优化图像上的高斯模糊算法,我想用__m256内在变量替换下面代码中浮点缓冲区[8]的使用。什么系列的指令最适合这项任务?//unsignedchar*new_imageisloadedwithdata...floatbuffer[8];buffer[x]=new_image[x];buffer[x+1]=new_image[x+1];buffer[x+2]=new_image[x+2];buffer[x+3]=new_image[x+3];buffer[x+4]=new_image[x+4];buffer[x+5]=new_image[x+5];buffer[x+6]=new_i

c++ - 归一化整数到/从 float 转换

我需要将规范化整数值与实浮点值相互转换。例如,对于int16_t,值1.0由32767表示,-1.0由-32768表示。尽管为每种整数类型(有符号和无符号)执行此操作有点乏味,但手工编写仍然很容易。但是,我想尽可能使用标准方法,而不是去重新发明轮子,所以我正在寻找的是标准C或C++头文件、Boost库或其他一些小型、可移植的东西,已执行这些转换的易于合并的来源。 最佳答案 这是一个使用std::numeric_limits的模板化解决方案:#include#includetemplateconstexprdoublenormaliz

c++ - float 末尾的点是否表示缺乏精度?

当我通过步进代码在VSC++中调试我的软件时,我注意到一些浮点计算显示为带有尾随点的数字,即:1232432.导致此结果的一个操作是:floatresult=pow(10,a*0.1f)/b其中a是一个很大的负数,大约在-50到-100之间,b通常在1左右。我读了一些关于float精度问题的文章。我的问题是尾随点是否是一种Visual-Studio方式告诉我这个数字的精度非常低,即在可变结果中。如果不是,那是什么意思?这在今天的工作中出现了,我记得有一个问题是较大的数字所以每次都会发生(我所说的“这个”是指尾随的点)。但我确实记得它发生在数字中有七位数字时。他们在这里指出float的精

ios - Xcode 调试窗口如何改变 float 和 double 的显示格式?

我在Xcode中调试C并在函数中设置断点以检查各种double值。Xcode坚持使用科学记数法来显示它们,这是一个真正的痛苦。我需要看到十进制表示。右键单击Decimal的“ViewValue”菜单选项,会发生奇怪的事情。任何人都知道如何让这个在printf'n我想看到的一切之外发挥得很好?? 最佳答案 查看LLDBVariableFormatting文档,特别是靠近顶部的类型格式部分。您可以使用typeformat命令更改默认输出。来自上面的链接Typeformatsenableyoutoquicklyoverridethedef