doule 型 和float 型表示的0都不是0

DDPG算法实战:用Python一步步实现深度强化学习中的连续动作控制 本文详细介绍了DDPG算法在深度强化学习中的连续动作控制应用,通过Python和PyTorch实现从零构建智能体。内容涵盖环境搭建、网络架构设计、经验回放、OU噪声实现及训练流程优化,帮助开发者掌握DDPG在机械臂控制等场景的核心技术。 阅读详情

阅读下面程序

#include<stdio.h>
int main(){
	double i;
	for(i = 0;i != 10;i+=0.1){
		printf("%.1f\n",i);
	}
	return 0;
}

试运行,看看结果是不是和你想的一样。


#include<stdio.h>

int main()

{

       float f = 1.0;

       float f1 = f/3;                                  // f1 = 1/3

       float f2 = f1*3;                          //f2 = 1;

       float f_result = f1 - f2/3;       //f_result = 0 ???

   

       if(0.0f == f_result)

       {

              printf("f_result== 0/n");

       }

       else

       {

              printf("f_result!= 0/n");

       }

   

       return 0;

}


 

通过上述程序,可以明确得到答案,但具体为什么如此,还需要从C语言中float类型变量的编码格式说起。

 

浮点数表示形如V=x * 2^y 的有理数进行编码,IEEE标准754仔细制定了浮点数及其运算的标准。

 

十进制的12.34可以这样表示:1*10^1 + 2*10^0 + 3*10^-1 + 4*10^-2。同样地,二进制的101.11可以这样表示:1*2^2 + 1*2^0 + 1*2^-1 +1*2^-2 。注意而今之中形如0.111…1正好是小于1的数。假定只用有限长度的编码,那么十进制是不能准确表示想1/3、5/7这样的数的,类似的,小数的二进制表示法只能表示那些能够被写成x * 2^y的数,其他的只能用近似数来表示。

 

IEEE浮点标准用V=(-1)^s * M * 2^E的形式来表示一个数:

(1)符号(sign)s决定数是负数(s=1)还是正数(s=0),而对0的符号位作为特殊情况处理。

(2)有效数(significant)M是一个二进制小数。

(3)指数(exponent)E是2的幂(可能是负数),他的作用是对浮点数的加权。

一个浮点数的位表示按上述情形划分为3个域。

 

标准C语言中,单精度float浮点格式的符号位=1,有效位=23,指数未=8,产生一个32位的表示。双精度double浮点格式的符号位=1,有效位=52,指数位=11,产生一个64位的表示。

 

根据指数位的值,被编码的值可以分为三种不同的情况,即,规格化值、非规格化值、特殊数值。当指数的为不全为0且不全为1时,属于规格化值;当指数位全为0时,属于非规格化值;当指数位全为1时,属于特殊数值。下面主要了解一下后两者情况。

 

非规格化值有两个目的。首先提供了一种表示数值0的方法当小数位也全为0时,可以根据符号位的不同表示+0.0和-0.0。另外一个功能是用来表示那些非常接近0.0的数,使用逐渐下溢出(gradual underflow)的方法实现这个属性。特殊数值当指数位全为1,而小数位全为0时,可以表示正无穷大和负无穷大。当小数位为非零时,结果值被称为NaN。

 

因为表示方法限制了浮点数的范围和精度,所以浮点运算只能近似地表示实数运算。系统需要使用“最接近”匹配值的值保存浮点值,这就是舍入(rounding)运算的任务。IEEE规定了四种舍入方式,默认的方式是向偶数舍入,也叫向最接近的值舍入。

 

 

浮点数的表示是不精确的,不能直接比较两个数是否完全相等,一般都是在允许的某个范围内认为像个浮点数相等,如有两个浮点数a,b,允许的误差范围为1e-6,则abs(a-b)<=1e-6,即可认为a和b相等。还有一种方法就是扩大再取整,比如a=5.23,b=5.23,直接比较 a==b一般为false,但是a和b都扩大一百倍,然后强制转换为int类型,再用==比较就可以了

 

float型变量和“零值”比较的方法:

const float EPSINON = 0.000001;

if ((x >= - EPSINON) && (x <=EPSINON))

浮点型变量并不精确,其中EPSINON是允许的误差(即精度),所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。如果写成if (x == 0.0),则是错误的。

因为1.0在计算机中可能存为0.999999或1.00001等,很难恰好是1.0


YOLO与ORB-SLAM3的结合:实现动态环境下的目标检测与视觉SLAM 摘要: 本文介绍如何将YOLOv5目标检测与ORB-SLAM3视觉SLAM系统结合,实现动态环境下的机器人感知与定位。内容包括:源码下载(集成项目YOLO_ORB_SLAM3)、libtorch安装(PyTorch C++支持)、编译配置(解决路径依赖问题)、ROS环境下的部署(Noetic适配),以及使用TUM数据集的测试流程(RGB-D数据关联与运行)。重点解决编译时Torch路径错误、ROS与Anaconda冲突等问题,并展示系统运行效果。该整合方案为动态场景SLAM提供目标检测能力,未来可优化检测模 阅读详情

相关推荐

VSCode+Keil高效开发STM32:Keil Assistant插件配置全攻略

本文详细介绍了如何通过VSCode的Keil Assistant插件,将Keil MDK的编译调试能力与VSCode的现代编辑体验相结合,打造高效的STM32开发环境。文章涵盖了从环境配置、工程导入、智能提示设置到与STM32CubeMX协同工作的全流程攻略,旨在解决Keil编辑器效率低下的痛点,大幅提升嵌入式开发的编码与项目管理效率。

gold的博客 508

double类型的变量与0的对比

日常总是会遇到double类型变量与0之间的比较。非严格情况下直接与0比较了,但实际上这是一种错误的写法。double为双精度类型,其一般保留15为小数。而Flaot单精度类型一般保留6为小数。故而不能直接与0进行比较,虽然有时候会得到自己想要的结果,但并不严谨。

肩上风骋的博客 1万+

Plant Simulation新手入门:5步搞定生产线物流仿真(附模型库使用技巧)

本文为Plant Simulation新手提供了从零开始构建生产线物流仿真的五步入门指南。通过理念重塑、流程规划、对象连接、参数设置到数据分析的完整流程,帮助用户快速掌握这一强大仿真工具的核心逻辑。文章特别强调了模型库的高效使用技巧,助力工程师在虚拟环境中精准模拟和优化生产系统,提升规划效率。

efc123456的博客 335

浮点数的总结

1、浮点数的表示范围: 首先明确一点,指数是用移码表示的; 指数全1,尾数全0表示无穷大,符号位0或1表示正无穷和负无穷两种情况; 指数全0,尾数全0表示0,同样由符号位决定是正0还是负0; 所以浮点数的指数表示移码范围是1~254,则原码表示范围是-126~+127; 双精度可以类比; 这样来看,1)浮点数最大的时候应该有:指数全1(254),尾数全1(包含一个隐含位,且用原码表示)

csg3140100993的博客 2795

STC8单片机高精度EV1527解码实战:定时器捕获+状态机抗干扰方案

EV1527是一种广泛应用于433MHz无线遥控的曼彻斯特编码协议,其核心在于对脉宽时序(如同步头、逻辑0/1)的微秒级精确识别。传统外部中断+延时判别方式受MCU中断延迟、编译优化及环境噪声影响,极易导致误码;而基于硬件定时器输入捕获的解码方案,将时间测量交由硬件完成,显著提升时序鲁棒性与温度/电压适应性。该技术适用于STC8等无专用无线解码外设的8位单片机,在智能开关、晾衣架、车库门控等IoT终端中实现低至0.003%的稳定误码率。本文聚焦STC8H系列利用T1定时器下降沿捕获与有限状态机协同解码EV1

weixin_29188997的博客 181

华为铁三角(AR、SR、FR)的考核指标设计

以和为核心,通过和实现协同。考核维度分为和,并随市场阶段动态调整权重。

从技术实践立足,从项目管理方法论延伸思考 2780

python提供了两种基本的数值类型_Python数值类型

数值类型python的数值类型包括常规的类型:整数(没有小数部分的数字)、浮点数(通俗地说,就是有小数部分的数字)以及其它数值类型(复数、分数、有理数、无理数、集合、进制数等)。除了十进制整数,还有二进制数、八进制数、十六进制数。类型 示例---------------------------------------整数 1234, -24, 0浮点数 ...

weixin_39903176的博客 785

正交试验-方差分析-数据展现形式

方差分析(ANOVA, Analysis of Variance)用于比较多个组之间的均值差异,确定因素对响应变量的显著性影响。示例分析。

m0_58326994的博客 1971

【Java】Java_09 类型转换

1.自动类型转换 自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。  特例: 可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围             Short  b = 12;     //合法           ...

weixin_34080951的博客 256

手机抽奖页面代码html,html5大转盘抽奖支持手机转盘抽奖代码

特效描述:html5 大转盘抽奖 支持手机 转盘抽奖代码。html5转盘,html5抽奖,手机转盘,手机抽奖,手机转盘抽奖,可配置奖品抽奖。代码结构1. 引入CSS2. 引入JS3. HTML代码大转盘活动var turnplate={restaraunts:[],//大转盘奖品名称colors:[],//大转盘奖品区块对应背景颜色outsideRadius:192,//大转盘外圆的半径textR...

weixin_39628551的博客 1872

从JTAG到AS模式:一文搞懂EP4CE10E22C8N所有配置引脚(MSEL, nCONFIG, DATA0)的用法

本文深入解析EP4CE10E22C8N FPGA的配置引脚(MSEL, nCONFIG, DATA0)在不同模式下的使用方法,特别关注从JTAG到AS模式的切换要点。通过详细的配置模式对比、状态机分析和PCB布局建议,帮助开发者避免常见陷阱,提升FPGA配置成功率。

weixin_33713350的博客 321

浮点数与“0”的比较

浮点数存在误差问题,所以我们不能直接用浮点数与“0”进行比较,直接进行比较是不正确的。 例如我们有一个浮点数a=0.01,这个数我们输出时设置保留一位小数,那么a打印出来会变成0.0。再下来我们用这个打印出来的值与"0"比较,我们是不是会认为0.0与0是相等的,但其实这个数原来是a=0.01,a与0是不相等的。在假设有一个浮点数a=-0.01,打印时设置保留一位小数,打印出来会变成0...

(ಥ_ಥ) (ಥ_ಥ) (ಥ_ಥ) 博客 7952

Wezterm的安装和简单配置

希望 wezterm 的主题配色,保持和 powershell 默认配色一致,也就是 Compell 主题。目的是在频繁使用 wezterm 时,原本的根据颜色判断文件信息(尤其是WSL里的Linux下,文件和目录颜色)依然可以使用。wezterm 默认用 cmd.exe, 我是 win11,希望默认用 powershell。

baiyu33的博客 4276

第二章 详细了解doule和float

float是单精度类型,精度是8位有效数字,取值范围是10的-38次方到10的38次方,float占用4个字节的存储空间 double是双精度类型,精度是17位有效数字,取值范围是10的-308次方到10的308次方,double占用8个字节的存储 为了和double区别,float型订一的数据末尾必须有f 例如:float a= 1.0f,如图如果不加f会报错,java:不兼容类型:从double转换到float可能会有损失 为什么会报上边的错误? 因为java默认的浮点型是double ,如果不加f

u010635924的博客 1325

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++中不能用doule0作为Bool判断条件

一般float型只能精确到小数到后六位即1e-6,将float型的数a的绝对值abs(a)与1e-6比较,如果abs(a)比1e-6还要小的话就可以认为a的值为零,因为小数六位以后是不精确的,是没有意义的。float是32位,double是64位。float32位中,有1位符号位,8位指数位,23位尾数位。double64位中,1位符号位,11位指数位,52位尾数位。要判断一个双精度浮点数:则是if( abs(f)

m0_49448331的博客 297

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C/C++数据存储之float和double在内存中的存储方式

文章目录float和double在内存中的存储方式float数据类型在内存中的存储double数据类型在内存中的存储总结 float和double在内存中的存储方式 说来惭愧,工作那么多年,对于float和double浮点数在内存中的存储方式一直迷迷糊糊,今日闲暇,干脆一口气将之前模糊不清的地方 一次性扫荡掉 float数据类型在内存中的存储 无论是单精度还是双精度,在内存存储中都分为3个部分:...

明故宫的记忆 1389

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

doule计算丢失精度

先来看Java中double类型数值加、减、乘、除计算式实例: public class Test{ public static void main(String [] args){ System.out.println(0.06+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.out.println(303.1/1000);

Super_Xiaoma的博客 330

java中比较float和double的大小

  分类: Java2011-10-17 20:24 553人阅读 评论(1) 收藏 举报 转自:http://blog.youkuaiyun.com/running8063/article/details/4093261 最近在项目中碰到了一个业务逻辑计算,代码如下(示例代码) double val1 = ...; double val2 = ..., double dif = .....

moneyisfrist的专栏 289

float double的精度以及与0比较

float与double的范围和精度 1. 范围   float和double的范围是由指数的位数来决定的。   float的指数位有8位,而double的指数位有11位,分布如下:   float:   1bit(符号位) 8bits(指数位) 23bits(尾数位)   double:   1bit(符号位) 11bits(指数位) 52bits(尾数位)   于是,flo

Mjt_csdn的专栏 1114

mysql 并发插入浮点数据异常_5分钟搞懂MySQL数据类型之浮点型FLOAT类型

速成指南5分钟搞懂MySQL数据类型之浮点型--FLOAT类型MySQL支持的浮点类型有两个:FLOAT和DOULE。单精度的FLOAT占用4个字节的空间,双精度的DOUBLE占用8个字节的空间。对于FLOAT,MySQL支持非标准语法,如:FLOAT(M,D)、REAL(M,D)或DOUBLE PRECISION(M,D)。这里(M,D)分别是数值位数和小数点后的位数。例如FLOAT(...

weixin_33142377的博客 749

浮点类型float double 以及BigDecimal

1.引言   float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。 先看下面代码 public static void main(String[] ...

客人 628

float double BigDecimal 详解

首先给看一个代码段package com.main;public class Test1 { public static void main(String[] args){ double b1=0.06+0.01; float b2=(float) (0.06+0.01); System.out.println(0.06+0.01);

程序员爱酸奶 3766

浮点数类型:内存和大小

浮点数类型:内存和大小 浮点数,我们可以通俗的认为是带有小数点的数字,它们也是一种数字格式。在Java中,提供了两种类型的浮点数:float和double。当然Java里也提供了对应的包装类:Float和Double。 数据类型 描述 内存占用 float -3.4E38 to +3.4E38 4 bytes in memory double -1.7E308...

weixin_34218890的博客 293

JAVA中double格式化控制精度小数位数,float同理

Java中如何对浮点数进行精度控制,在JAVA中提供了多种参数来实现精度的不同控制方式。以double为例,float同理 转自http://stephen830.iteye.com/blog/260776Java代码 /* * Created on 2005-6-5 * Author stephen * Email zhoujianqiang AT gm

起風了 1300

ROS基础——各类基础小bug汇总

bug 1 error: no matching function for call to ‘ros::NodeHandle::advertise<<expression error> >(const char [7], int)’ ros::Publisher pubSpeed = nh_glob.advertise<std_msgs/Float64>("/speed",1);

weixin_44991673的博客 1276

Java小记 —— 浮点数(double、float)的格式化问题及处理

    平时常会面临浮点数的格式处理问题,下面就举例说一说常见的问题及处理:    1,科学计数法问题    一个浮点数123456789.10,在打印的时候变成了1.234567891E8,处理起来很简单,如:double d = 123456789.10; System.out.println(d);//1.234567891E8 NumberFormat nf = NumberFormat....

mingjia1987的博客 1万+
上一篇: 子序列的和
下一篇: 排列(decimal)
jeffery0628
博客等级 码龄11年 39粉丝 112原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值