P10 数据类型-实型

实型(浮点型)
用于表示小数。
浮点型变量分为两种:
1.单精度float
2.双精度double
两者的区别在于表示的有效数字范围不同。

数据类型占用空间有效数字范围
float4字节7位有效数字
double8字节15~16 位有效数字

示例:

#include <iostream>
using namespace std;

int main() {
	
	//1、单精度 float
	//2、双精度 double
	//默认情况天,输出一个小数,会显示出6位有效数字

	float f1 = 3.1415926f;
	cout << "f1 = " << f1 << endl;

	double d1 = 3.1415926;
	cout << "d1 = " << d1 << endl;

	//统计float和double占用内存空间
	cout << "float 占用内存空间为: " << sizeof(float) << endl; //4字节
	cout << "double 占用内存空间为:" << sizeof(double) << endl;//8字节

	//科学计数法

	float f2 = 3e2; //3 * 10^2
	cout << "f2 = " << f2 << endl;
	float f3 = 3e-2; //3 * 10^-2
	cout << "f3 = " << f3 << endl;

}

结果:
在这里插入图片描述
PS:执行浮点数运算选用double,这是因为float通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几。事实上,对于某些机器来说,双精度运算甚至比单精度还快,

MODULE Module1 VAR intnum x1:=0; VAR byte byte1{7}; VAR socketdev plc; CONST robtarget p10:=[[300.29,43.32,572.52],[0.0112584,0.00376771,-0.948239,-0.317336],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]; CONST robtarget p20:=[[50.18,-32.92,700.20],[0.436243,0.482279,0.759345,0.0222028],[-1,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]; CONST robtarget p30:=[[22.77,-332.46,597.48],[0.0155268,0.497229,0.746593,-0.441726],[-1,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]; CONST robtarget p40:=[[-32.16,-36.73,740.79],[0.395355,0.16397,-0.702491,0.568608],[-1,-1,-2,4],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]; CONST robtarget p50:=[[204.94,144.39,410.86],[0.121204,0.954404,-0.0286826,0.271294],[0,-1,-2,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]; CONST jointtarget jpos10:=[[-79.4939,-39.2035,0.00108763,33.5104,89.7457,-0.011057],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]; PROC main() tx; dkzd; WHILE TRUE DO movej p10,v100,z0,tool0; movej p20,v100,z0, tool0; movej p30,v100,z0, tool0; movej p40,v300,z0, tool0; movej p50,v300,z0, tool0; ENDWHILE ENDPROC PROC tx() socketclose plc; socketcreate plc; waittime 0.2; socketconnect plc,"192.168.101.5",2000; waittime 0.2; ENDPROC PROC dkzd() IDelete x1; CONNECT x1 WITH zd; ITimer 0.2,x1; endproc TRAP zd GetJointData 1\Speed:=byte1{1}; GetJointData 2\Speed:=byte1{2}; GetJointData 3\Speed:=byte1{3}; GetJointData 4\Speed:=byte1{4}; GetJointData 5\Speed:=byte1{5}; GetJointData 6\Speed:=byte1{6};!35-40行获取当前角速度单位是°/s byte1{1}:=abs(round(byte1{1})); byte1{2}:=abs(round(byte1{2})); byte1{3}:=abs(round(byte1{3})); byte1{4}:=abs(round(byte1{4})); byte1{5}:=abs(round(byte1{5})); byte1{6}:=abs(round(byte1{6}));!41-46行把获取的角速度去小数,变正 byte1{7}:=round(sudu*1000);!将当前线速度化成mm/s并去小数 SocketSend plc\Data:=byte1; ENDTRAP ENDMODULE
11-18
由于没有提供具体包含 `VAR`、`CONST`、`PROC`、`TRAP` 等的代码,下面给出一般性的分析和优化思路。 ### 变量定义(VAR 和 CONST) - **VAR**:在许多编程语言里,`VAR` 用于定义变量。在代码里合理定义变量是关键,要保证变量名具有清晰的含义,且变量类型与使用场景相匹配。 ```pascal VAR speed: real; // 定义一个实型变量 speed count: integer; // 定义一个整型变量 count ``` - **CONST**:`CONST` 用于定义常量,常量的值在程序运行期间不可改变。合理使用常量能够增强代码的可读性与可维护性。 ```pascal CONST PI = 3.14159; // 定义一个常量 PI MAX_COUNT = 100; // 定义一个常量 MAX_COUNT ``` ### 过程(PROC) - **PROC**:通常代表过程(Procedure),过程是一段完成特定任务的代码块。过程的参数传递要清晰,避免过多的全局变量使用,以提高代码的模块化程度。 ```pascal PROCEDURE CalculateArea(radius: real; VAR area: real); BEGIN area := PI * radius * radius; END; ``` ### 陷阱处理(TRAP) - **TRAP**:一般用于处理异常或错误情况。在代码里要对可能出现的异常进行捕获和处理,防止程序崩溃。 ```python try: result = 10 / 0 # 这里会引发除零错误 except ZeroDivisionError: print("除数不能为零") ``` ### 运动指令、套接字操作、定时器和数据处理 - **运动指令**:通常用于控制机器人、机械设备等的运动。要保证运动指令的参数正确,并且处理可能出现的运动错误。 - **套接字操作**:用于网络通信。要处理好连接、发送和接收数据时可能出现的错误,如连接超时、数据丢失等。 ```python import socket # 创建套接字 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect(('127.0.0.1', 8888)) s.sendall(b'Hello, server!') data = s.recv(1024) print('Received:', data) except socket.error as e: print('Socket error:', e) finally: s.close() ``` - **定时器**:用于定时执行任务。要确保定时器的时间设置合理,并且处理好定时器触发时的任务。 ```python import threading def timer_task(): print("定时器任务执行") # 创建定时器,5 秒后执行 timer_task timer = threading.Timer(5, timer_task) timer.start() ``` - **数据处理**:要保证数据的正确性和完整性,处理好数据转换、过滤等操作。 ### 代码优化方案 - **变量和常量**:减少全局变量的使用,使用局部变量,提高代码的可维护性。 - **过程**:将功能模块化,减少过程的复杂度,提高代码的复用性。 - **陷阱处理**:对可能出现的异常进行全面的捕获和处理,避免程序崩溃。 - **运动指令、套接字操作、定时器和数据处理**:添加日志记录,方便调试和排查问题;使用缓冲和异步操作提高性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值