03-Tcl数学表达式及expr命令

3 Tcl书写表达式及expr命令

Tcl提供了有效的数学运算和逻辑运算功能。通过expr可以实现对数学表达式的分析和计算。

3.1 数学与逻辑运算符

运算符 说明
- + ~ ! 一元减(取负)、一元加(取正)、按位反、逻辑非
* / % 乘、除、取余
+ - 加、减(二元操作符)
<< >> 左移、右移(二元操作符)
< <= >= > 小于、小于等于、大于等于、大于
== != 布尔等于、不等于
& 按位与
^ 按位异或
| 按位或
&& 逻辑与
|| 逻辑或
x?y:z 三元表达式,x满足为y,不满足为z

3.2 数学函数

函数名 说明 举例
abs(arg) 取绝 set a -10 # a = -10 ; set a [expr abs($a)]
acos(arg) 反余弦
asin(arg) 反正弦
atan(arg) 反正切
atan2 比值取反正切
ceil(arg) 向上取整
cos(arg) 余弦
cosh(arg) 双曲余弦
double(arg) 转换双精度
exp(arg) exp运算e的幂
floor(arg) 向下取整,与ceil相对
fmod 取余(结果为浮点型)
hypot(x,y) 根据直角三角形两直角边长度计算出斜边长度
int(arg) 取整
log(arg) 自然对数
log10(arg) 以10为底的度数
pow 幂运算
rand() 取0-1之间的随机实数 set a [expr 10*[expr rand()]]
round(arg) 四舍五入取整 set a [expr round(10.5)]
sin(arg)
sinh(arg)
sqrt(arg) 求二次根
srand(arg) 以整数arg为随机数生成器的种子产生随机数
tan(arg)
tanh(arg)

3.3算数运算举例

set var1 5
set var2 3

set res [expr $var1 /$var2]      #var1和var2都是整数结果为整数
=>1

set var1 5.0
set res [expr $var1 /$var2]      # var1是浮点数,所以结果为浮点数
=>1.66666666667

set var1 3
incr var1 2                      # incr a b 将b加到a上,a,b必须都是整数,
                                 # 更改a原有的值
=>5

puts $var1
=>5

incr var1 -4                      # var1加上-4,var1的值现在为1
=>1                       

3.4 incr命令

incr命令根据指定的步长来增加或减少参数的值。当步长为负时,减少参数值;当步长为正时,增加参数值。默认步长+1。

incr varName ?step?

set a 10
incr a
=> a=11

set a 10
incr a -1
=> a=9
本文转载于网络 如有侵权请联系删除

相关文章

  • PTA 1087 有多少不同的值 (20 分)

    题目当自然数n依次取1、2、3、……、N时,算式⌊n/2⌋+⌊n/3⌋+⌊n/5⌋有多少个不同的值?(注:⌊x⌋为取整函数,表示不超过x的最大自然数,即x的整数部分。)输入格式:输入给出一个正整数N(2≤N≤104)。输出格式:在一行中输出题面中算式取到的不同值的个数。输入样例: 2017 结尾无空行 输出样例: 1480 结尾无空行复制解题思路inputInt=int(input()) #inputInt=2017 resDic=dict() foriinrange(1,inputInt+1): res=i//2+i//3+i//5 #字典里面没值就添加 ifresnotinresDic: resDic[res]=1 print(len(resDic))复制

  • PTP协议:原理和其他知识

    本文来自LeaderAmerica,视频带来了IEEE标准PTP(PrecisionTimeProtocol)协议v2.1版本的新特性,主讲人是来自ALCNetworkX的AndreasHildebrand。主讲人首先介绍了PTP协议的背景。PTP协议主要用于在数据网络中传输数据时钟的时间同步和频率同步,可达到亚微秒级别的传输精度。其前两个版本分别是于2002年发布的v1和2008年发布的v2。其采用一个主-从时钟系统,多个“从”时钟(SlaveClock)与“主”时钟(MasterClock)同步,而媒体自身的时钟则由各个“从”时钟分别生成。其大致原理如下图所示:随后,他强调了本次版本的向后兼容性(BackwardCompatibility)。他强调最新的v2.1版本是向后兼容的,即完全不会影响原本的2008版本的使用,而2008版本的“从”时钟将会与v2.1版本的主时钟同步。此后,他开始详细介绍PTP协议v2.1的新特性。主要分为以下四个部分:1.将标准的制定描述得更加清晰2.增加了协议的灵活性3.增加了协议的鲁棒性4.增加了精确度灵活性方面,新版本的PTP协议带来了混合广播/单播

  • XtraBackup工具详解 Part 11 使用innobackupex对部分备份进行恢复

    实验环境此次实验的环境如下MySQL5.7.26Redhat6.10操作系统账号:mysql数据库备份账号:backup上节我们说了如何进行部分备份,这部分我们说如何对其进行还原关于还原部分备份,只有一个注意点,即不能使用传统的prepare和copyback命令,需要使用export和import的形式1.prepare阶段上节我们介绍了如何使用innobackupex对数据库进行部分备份结束后我们得到了一个非一致性的备份文件,即需要对未提交的事务进行回滚对提交的事务进行前滚这个过程在xtrabackup中叫做准备阶段(preparestage)对部分备份的数据文件需要加上--export选项1.1prepare备份使用--apply-log--export进行恢复动作,相当于Oracle的recover动作后面接部分备份的目录如果内存有空闲,可使用--use-memory加快速度innobackupex--apply-log--export--use-memory=1G/oradata/data/mysql/xtra/2019-11-06_10-39-58 复制在apply-log

  • dotnet 使用 Environment.FailFast 结束程序

    在运行到一些诡异的代码,这时的程序已经无法继续运行,需要退出,那么如何在记完日志之后在退出程序记录更多信息?可以通过Environment.FailFast里面添加字符串告诉用户当前的进程无法继续运行在dotnet中有Environment.FailFast可以用来表示程序无法继续使用需要退出,这个方法和Exit不一样的是可以传入字符串如判断因为林德熙逗比无法继续运行if(str=="林德熙是逗比") { Environment.FailFast(str); }复制这时程序退出,可以在Windows日志里面的应用程序找到这个信息通过这个方法不仅可以记日志,还可以自动创建一个DUMP文件,至于这个DUMP放在哪里,请看win10uwp收集DUMP文件同时这个方法调用的时候finally里面的代码是无法执行的stringstr="林德熙是逗比"; try { if(str=="林德熙是逗比") { Environment.FailFast(str); } } finally { Console.WriteLine("其实

  • java基础学习_基础语法(上)02_day03总结

    ============================================================================= =============================================================================涉及到的知识点有: 0:基本概念概述   1:运算   2:运算符   3:操作数   4:表达式 1:运算符(掌握)   (1)算术运算符(掌握)   (2)赋值运算符(掌握)   (3)比较(关系)运算符(掌握)   (4)逻辑运算符(掌握)   (5)位运算符(了解)   (6)三元(三目/条件)运算符(掌握) 2:键盘录入(掌握) 3:流程控制语句 4:if语句(掌握)   (1)三种格式:   (2)注意事项:   (3)案例:   (4)三元运算符和if语句第二种格式的关系:============================================================================= =======

  • [文明6] 最大化利用工厂等影响6格建筑的六边形网格规划(2016-10-27增加五、六节,19城+133锤方案,37城+259锤方案)

    最大化利用工厂等影响6格建筑的六边形网格规划(2016-10-27增加五、六节,19城+133锤方案,37城+259锤方案) 作者:zyl910 一、原理 文明6里有一些特殊的建筑及奇观,它们不仅对所属城市有效,还能覆盖一定范围内的城市。 工业区(IndustrialZone)建筑—— 工厂(Factory):所在工业区6格半径范围内的所有城市产能+3,大工程师点数+1 发电厂(PowerPlant):所在工业区6格半径范围内的所有城市产能+4,大工程师点数+1 娱乐区(EntertainmentComplex)建筑—— 动物园(Zoo):所在娱乐中心6格半径范围内的所有城市满意度(娱乐)+1 体育场(Stadium):所在娱乐中心6格半径范围内的所有城市满意度(娱乐)+2 奇观—— 罗马斗兽场(Colosseum):所在格周围6格半径范围内的所有城市文化+2、且满意度(娱乐)+3 另外有个城邦还可能增加这个影响范围—— 多伦多(Toronto):宗主国的工业区与娱乐中心的区域效应范围增加3格 故可通过仔细规划城市布局,构建一个共享区域,使范围内的城市享受同时被多个工业

  • Ubuntu20.04下使用基于fcitx的输入法时,Mendeley无法输入中文的解决方案

    本方案并非原创,但由于笔者在网上苦苦寻找许久才找到这一可行方法,故记录下来。在此感谢原作者yinflying的努力与无私共享。原文已失效,后来网友JackieMium也写过一篇博文。本篇博文无意抄袭,只是希望为后来人指路。 问题 在Ubuntu19及以前,尽管Mendeley不支持fcitx中文输入,但只需要将/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so拷贝至Mendeley安装目录下的对应位置(如/opt/mendeleydesktop/plugins/qt/plugins/platforminputcontexts)即可使得Mendeley支持fcitx中文输入。但Ubuntu20.04后,该方法不再适用。 解决 yinflying提供了自行编译的libfcitxplatforminputcontextplugin.so文件(见这里),经笔者验证,将该文件而非系统自带的/usr/lib/x86_64-linux-gnu/qt5/plu

  • Docker registry-mirrors

    { "builder":{  "gc":{   "defaultKeepStorage":"20GB",   "enabled":true  } }, "debug":true, "experimental":true, "features":{  "buildkit":true }, "insecure-registries":[], "registry-mirrors":[  "https://6ua7riiy.mirror.aliyuncs.com",  "https://mirror.ccs.tencentyun.com",  "https://reg-mirror.qiniu.com",  "https://docker.mirrors.ustc.edu.cn",  "https:

  • 判断ssh登录密码验证错误超过5次的IP被拉黑

    [root@crushlinux~]#catsecurehost.sh#!/bin/bash awk'/Failed/{print$(NF-3)}'/var/log/secure|sort|uniq-c|awk'{print$2"="$1}'>/tmp/ip.txt foriin$(cat/tmp/ip.txt)do   ip=$(echo$i|awk-F='{print$1}')   cishu=$(echo$i|awk-F='{print$2}')   if[$cishu-ge5]   then     echo"sshd:$ip">>/etc/hosts.deny   else     echo"$ip$cishu次登录异常">>/tmp/ssh-error.txt   fidone   作者:房佳亮   邮箱:crushlinux@163.com   出处:http://www.cnblogs.com/crushlinux/   文章内容

  • tomcat启动

    启动:bin/start.up.bat双击运行该文件 访问:127.0.0.1:8080  或者ip:8080  或者localhost:8080 正常关闭:1点击shutdown.bat  2ctrl+c; 配置: 部属项目的方式:   1直接将项目放到webapps目录下面即可     *localhost:8080/hello/hello.html           8080/项目的访问路径--》虚拟目录         简化部属:将项目打成war包,在将war包放在webapp目录下,可以自动解压缩,删除之后也会自动将文件夹删除     2配置conf/server.xml文件   在<Host>标签体中配置--------不安全   <ContextdocBase="D:\hello"path="/hehe"/> docBase:项目存放的路径 path:虚拟目录   3在conf\Catalina\localhost创建任意名称的xml文件

  • 寒假学习计划

    寒假学习计划 课程及选择理由 课程:C++程序设计--西北工业大学魏英 课时:前面的一些内容与c语言重复,因此从25讲开始看起,共有23讲 选择理由:之前看的是郭恺老师的慕课,但听不大懂,便换成这个慕课,较浅显易懂。 学习计划 毎天观看两节微课 完成情况: 2.7--(1)第一个c++程序,(2)什么是对象;(面向对象程序设计--c++,教师:翁恺)——已完成 2.8--(1)面向对象基本原理,(2)自动售票机例;(面向对象程序设计--c++,教师:翁恺)——已完成 2.9--(1)定义类及成员的访问限制,(2)类的数据成员,类的成员函数,类的声明;——已完成 2.10--(1)对象的定义及对象的动态建立和释放(2)对象成员的引用,对象的赋值,对象的指针;——已完成 2.11--(1)什么是构造函数及构造函数的定义,(2)构造函数的重载、带默认参数的构造函数;——已完成 2.12--(1)定义默认构造函数、隐式类类型转换(2)复制构造函数与合成复制构造函数;——已完成 2.13--(1)析构函数的定义与合成析构函数,(2)何时需要编写析构函数;——已完成 2.14--(1)对象数组及指

  • WebService-相关概念介绍

    WebService学习总结(二)——WebService相关概念介绍 一、WebService是什么?   1.基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据)   2.一个跨语言、跨平台的规范(抽象)   3.多个跨平台、跨语言的应用间通信整合的方案(实际) 二、为什么要用Webservice?   webservice能解决: 跨平台调用 跨语言调用 远程调用 三、什么时候使用webService?   1.同一家公司的新旧应用之间   2.不同公司的应用之间   3.一些提供数据的内容聚合应用:天气预报、股票行情 四、WebService中的几个重要术语 4.1、WSDL(webservicedefinitionlanguage)   WSDL是webservice定义语言,对应.wsdl文档,一个webservice会对应一个唯一的wsdl文档,定义了客户端与服务端发送请求和响应的数据格式和过程 4.2、SOAP(simpleobject accessprotocal)   SOAP是"简单对象访问协议" 是一种简单的、基于HTTP

  • Pyhton3+AirTest+[001]+小程序UI自动化之环境搭建

      一、Airtest框架简介 AirtestProject是网易开发的一个开源自动化测试框架。与其他自动化测试框架相比,Airtest项目具有以下两个优点: 大大降低了编写和维护自动化脚本的成本 Airtest希望以所见即所得的方式完成脚本的录制。即使测试人员不知道脚本,他们也可以通过正常的单击和拖动操作自动记录脚本,这可以大大降低企业和项目的自动维护成本。 解决游戏测试的痛点 AirtestProject希望通过支持不同的游戏引擎,成为一个真正的跨引擎和跨平台的自动化测试平台。 底部的主要测试框架是Airtest和Poco。两者之间的区别是: Airtest:这是基于图像识别原理的基于Python的跨平台UI自动化测试框架,适用于游戏和应用程序。 Poco:基于UI控件搜索的自动化测试框架。它的核心优势在于,它不仅支持Android和IOS,还支持游戏。它还支持微信小程序,微信小游戏和H5应用程序。 官方文档:https://airtest.doc.io.netease.com/tutorial/0_automated_testing

  • unity编辑器xml数据库插件

    unity编辑器xml数据库插件 注:9月9日更新,其中MyXML.cs中有一句代码写错,查找功能失误,文中已经修改! 注:9月1日更新说明:xml存储结构,因为在用xml之前不知道正规的xml数据结构,所以是自创的结构。虽然也能完成功能,但是据说策划配置时不方便,所以为了统一,不使用节点的方式存储数据, 而是通过添加属性,设置属性的方式来存取数据。 直接上图看的清楚些: 我之前设计的格式: 现在的格式: 关于这部分的代码我会贴在最后。 程序和数据分离的意义我就不多说了,大家自己脑补或者百度。在使用unity开发时,数据的调试是非常频繁和重要的。我们可以制作一个简单的编辑器插件,将数据显示在Inspector面板上,并进行编辑操作。这样测试人员就可以非常方便的管理测试数据了。 需求很简单,具体的效果是,能读取资源内的类,将其属性显示在面板上,可以对此进行增删改查的操作。如下图所示(对象组,相当于数据库所有的表。对象,相当于表的所有记录)。         当需要创建一条新记录的时候,先填上主键,然后点击创建按钮。编辑完成后点击插入即可。 &n

  • [Luogu 3952] NOIP2017 时间复杂度

    [Luogu3952]NOIP2017时间复杂度 <题目链接> 一年的时间说长不长,说短,也不短。 一年之内无数次觉得难得可怕的题目,原来也就模拟这么回事儿。 #include<cstdio> #include<iostream> #include<set> #include<stack> #include<string> intT; structLayer { std::stringname; intstate; Layer(std::stringname,intstate):name(name),state(state){} }; intSolve(std::strings) { if(s=="O(1)") return0; intans=0; for(inti=4;s[i]!=')';++i) ans=ans*10+s[i]-'0'; returnans; } intNumber(std::strings) { if(s[0]=='n') return0; intans=0; for(inti=0;

  • 设计模式之行为型模式

       1、观察者模式: /** *抽象观察目标 */ publicabstractclassSubject{ protectedArrayList<Observer>observers=newArrayList<>();//定义一个观察者集合用于存储所有观察对象 //注册方法,用于向观察者集合中添加一个观察者 publicvoidattach(Observerobserver){ observers.add(observer); } //注销方法,用于在观察者集合中删除一个观察者 publicvoiddetach(Observerobserver){ observers.remove(observer); } //抽象通知方法 publicabstractvoidnotifyObserver(); } /** *具体观察目标 */ publicclassConcreteSubjectextendsSubject{ //通知所有观察者 @Override publicvoidnotifyObserver(){ for(Objectobs:

  • Windows下MySQL的安装

    MySQL简介: MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件。 MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。 由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。 MySQL下载: 官网提供的安装MySQL的方式有三种: 在线安装版:mysql-installer-web-community.msi 离线安装版:mysql-installer-community.msi 解压缩版:mysql-8.0.13-

  • Java Virtual Machine

    Java Java是一种跨平台的面向对象编程语言,具有封装、继承、多态的特性。 同时具有有一次编写,多处运行的优势。由JVM支持在多种操作系统上运行。 类加载器 Bootstrap:根加载器由c++编写,用于引导Java程序,是虚拟机的一部分 Extendsion:扩展加载器由Java编写,加载jre/lib/ext下的Java平台的扩展包 Application:用户加载器由Java编写,加载用户类路径下的类库,加载器位于rt.jar包中com.java.lang.ClassLoader 双亲委派机制:防止类冲突,一个类加载器收到类加载请求时,会将请求委托给父类加载器去完成,层层递进,当父类加载器无法完成加载请求时,会委托给子类加载器。如果出现相同包路径相同类名,则以更高级别类加载器的返回结果为准。 类加载过程: 加载:将class文件字节码内容加载到内存中,并转换为方法区的运行时数据结构,然后生成这个类的java.lang.Class对象 链接:将Java类的二进制代码合并到JVM的运行状态中的过程。包括验证(确认类信息符合JVM规范)、准备(为static变量分配内存并设

  • 二分(三分)+快速幂

      之前学习的二分,现在感觉突然理解许多,补一下总结 首先,二分能够解决什么样的问题呢,个人认为,二分能够快速解决已经知道答案范围(线性)但是不知道确切答案的问题,例如在一个有序序列中查找某一元素出现的(最早,最晚)位置,求某单调(或在给定区间上单调)函数的零点,最大化最小值或者最小化最大值等等 二分的模板大体如下: intl=x;//x表示元素可能出现的最小(最左边)的情况 intr=y;//y表示元素可能出现的最大(最右边)的情况 intans,mid; while(i<=l) { mid=(l+r)/2;//二分 if(check(mid))//判断中点的情况 { l=mid+1; ans=mid;//或者ans=max(ans,mid)等,ans用于保存答案,如果需要所有可行答案中的最大值或者最小值加上max或者min即可 } else { r=mid-1; } } 复制 总体来讲二分的思想还是比较简单的,但是问题的难点经常不是考虑不到二分,而是考虑到二分却不知道如何判断要查找的元素在mid的情况下能否可行,即如何编写check(mi

  • 使用Xcode和Instruments调试解决iOS内存泄露

    使用Xcode和Instruments调试解决iOS内存泄露 发布于:2012-12-0409:30阅读数:45854 虽然iOS5.0版本之后加入了ARC机制,但由于相互引用关系比较复杂时,内存泄露还是可能存在。所以了解原理很重要。这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存 “”   阅读器   虽然iOS5.0版本之后加入了ARC机制,但由于相互引用关系比较复杂时,内存泄露还是可能存在。所以了解原理很重要。 这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露,以及NSZombieEnabled设置的使用。 本文假设你已经比较熟悉Obj-C的内存管理机制。 实验的开发环境:XCode4.5.2 1、运行Demo。 先下载一个实现准备好的内存泄露的Demo吧: leakapp 下载下来,打开运行,程序是一个寿司的列表,列出各种寿司卷。试着选择里面的几行,应该是选第二行的时候就崩溃了。崩溃截图: 在崩溃的地方断住了,知道crash的地方了,但是不知道具体crash的原因。

  • ElasticSearch的基础概念介绍

    1、ElasticSearch简介 1.1、简介 官网:https://www.elastic.co/ Elasticsearch(简称ES)是一个基于ApacheLucene构建的开源、分布式、RESTful接口的全文搜索引擎,Elasticsearch通过对Lunece的封装,隐藏了复杂性,提供了使用简单的RESTfulApi。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,因为对文档进行了分词处理。ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据,可以在极短的时间内存储、搜索和分析大量的数据。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 Tip:ElasticSearch底层的全文检索是基于Lucene实现的。 1.2、为什么要使用它 在业务开发中,基于ES的特性,通常有下面这些场景需要使用它: 存储大量数据。通过在使用mysql存储的时候,数据的单位是G。使用E

相关推荐

推荐阅读