首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么这会导致带有字符的无限循环,而不是双精度?

这个问题涉及到字符和双精度数据类型在无限循环中的行为差异。首先,我们需要了解字符和双精度数据类型的定义和特点。

字符数据类型是一种用于表示文本字符的数据类型,通常使用ASCII或Unicode编码。它们可以表示字母、数字、符号和其他特殊字符。字符数据类型在计算机内部以整数形式存储,并且可以进行比较、拼接和其他字符串操作。

双精度数据类型是一种用于表示浮点数的数据类型,通常用于存储较大范围和更高精度的数值。它们使用IEEE 754标准来表示浮点数,并且可以进行数学运算,如加法、减法、乘法和除法。

现在我们来解答为什么带有字符的无限循环会导致字符而不是双精度数据类型。在编程中,无限循环通常是由一个条件表达式控制的,当条件为真时,循环会一直执行下去。

当条件表达式涉及到字符时,它会根据字符的ASCII或Unicode值进行比较。例如,如果条件是判断一个字符是否等于某个特定的字符,循环将会一直执行,直到条件不再满足。这是因为字符数据类型是离散的,有限的字符集,可以有无限多个字符值。

相反,当条件表达式涉及到双精度数据类型时,它会根据数值进行比较。双精度数据类型是连续的,可以表示无限多个数值,但是在实际计算机中,双精度数值是有限精度的。因此,在无限循环中,双精度数据类型的值可能会趋近于无限大或无限小,但不会真正达到无限。

综上所述,带有字符的无限循环会导致字符而不是双精度数据类型,是因为字符数据类型是离散的,有限的字符集,可以有无限多个字符值,而双精度数据类型是连续的,有限精度的数值类型。

请注意,以上答案是基于一般情况下的编程语言和计算机系统的行为,具体实现可能会有所不同。对于具体编程语言和平台的行为,建议参考相关文档和规范。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript之0.1+0.2=0.30000000000000004计算过程

无限循环0011 //由于是二进制,所以 E 表示将前面的数字乘以 2 n 次幂 //注意:n 是十进制数字,后文需要 2^(-4) * (1.1001100110011循环0011...位二进制来存储 number ---- 十进制与 Double 相互转换公式如下: V:表示十进制结果 SEM:表示精度浮点数结果(就是 S 拼 E 拼 M,不是相加) 2^(-4) *...---- 所以用一句话来解释为什么JS有精度问题: 简洁版: 因为JS采用Double(精度浮点数)来存储number,Double小数位只有52位,但0.1等小数二进制小数位有无限位,所以当存储...考虑周到版: 因为JS采用Double(精度浮点数)来存储number,Double小数位只有52位,但除最后一位为5十进制小数外,其余小数转为二进制均有无限位,所以当存储52位时,会丢失精度!...,导致了计算结果偏差,我制作了一张流程图帮助大家理解: 显然,JavaScript 是按照「验证方法二」去计算 0.1+0.2 ,我有两个疑问: ① 为什么不用误差更小「验证方法一」呢?

1.1K30

热点面试题:为什么 0.1+ 0.2 != 0.3,如何让其相等?

0.1 二进制是0.0001100110011001100...(1100 循环),0.2 二进制是:0.00110011001100...(1100 循环),这两个数二进制都是无限循环数。...JavaScript 是如何处理无限循环二进制小数呢?...在二进制科学表示法中,精度浮点数小数部分最多只能保留 52 位,再加上前面的 1,其实就是保留 53 位有效数字,剩余需要舍去,遵从“0 舍 1 入”原则。...• 根据这个原则,0.1 和 0.2 二进制数相加,再转化为十进制数就是:0.30000000000000004。 精度数是如何保存?...由于 JavaScript 数字是精度数,这里就以精度数为例,它指数部分为 11 位,能表示范围就是 0~2047,IEEE 固定精度偏移量为 1023。

8310

范围和精度?那就是【表示不到】意思啊!

今天,我们接着把浮点数范围和精度问题弄清楚。 浮点数范围和精度 根据IEEE754 浮点数标准,无论是单精度浮点数,还是精度浮点数,都是通过有限个 bit 位来表示。...根据IEEE754 浮点数标准中规定,我们可以计算出单精度浮点数和精度浮点数范围和精度。...单精度浮点数 以单精度浮点数 float 为例,它能表示最大二进制数为 +1.11111…1 * 2^127(小数点后23个1),二进制 1.11111…1 ≈ 2,所以 float 能表示最大数为...当有无限循环小数(二进制无效循环)存储在计算机时,只能被截断,所以就会导致小数精度发生损失情况。这也就是解释了为什么浮点数没有办法用二进制精确表示。...按照IEEE 754 标准 64 位精度浮点数,小数部分最多支持 53 位二进制位,之后二进制位就会被截断。因此,计算机存储0.2二进制不是完整,是有精度缺失。 于是乎!

16010

习题解答

解释器将 #f 解析为 false,任意其他值都作为 true 来处理,#t 并不是必要,只是为了方便。...(假定对特殊形式 if 求值规则对两种序都是一样,即先分析谓词,再根据结果决定分析哪个表达式) 解答 对于应用序求值,由于会先对参数求值,所以会先去求值 (p),导致无限循环,程序卡死: (test...因为 new-if 是遵循应用序求值,无论 good-enough? 判断结果如何,sqrt-iter 都会被先求值,导致程序无限循环运行下去。...测试效果不会很好。此外,在实际计算机中,算术运算往往是以有限精度进行这会使我们测试不适用于非常大数。请举例说明上述两种情况。另一种实现 good-enough?...对于很大数来说,机器有限精度无法表示两个大数之间微小差别,这会导致程序无限执行下去(差距永远不会小于 0.001)。

69060

小小 float,藏着大大学问

不知道你有没有想过,为什么计算机要用补码方式来表示负数?在回答这个问题前,我们假设不用补码方式来表示负数,只是把最高位符号标志位变为 1 表示负数,如下图过程: ?...可以发现,0.1 二进制表示是无限循环,由于计算机资源是有限,所以是没办法用二进制精确表示 0.1,只能用「近似值」来表示,就是在有限精度情况下,最大化接近 0.1 二进制数,于是就会造成精度缺失情况...前面提到过,并不是所有小数都可以用「完整」二进制来表示,比如十进制 0.1 在转换成二进制小数时候,是一串无限循环二进制数,计算机是无法表达无限循环二进制数,毕竟计算机资源是有限。...因此,计算机只能用「近似值」来表示该二进制,那么意味着计算机存放小数可能不是一个真实值,现在基本都是用 IEEE 754 规范精度浮点类型或精度浮点类型来存储小数,根据精度不同,近似值也会不同...不是的,0.1 和 0.2 这两个数字用二进制表达会是一个一直循环二进制数,比如 0.1 二进制表示为 0.0 0011 0011 0011… (0011 无限循环),对于计算机而言,0.1 无法精确表达

1.7K20

ES10新特性(一)

BigInt -任意精度整数 BigInt 是第七种 原始类型。 BigInt 是一个任意精度整数。这意味着变量现在可以 表示²⁵³ 数字,不仅仅是9007199254740992。...[0]); // "l" 结果是单个 "l"(注意:匹配存储在 matches[0] 中不是 matches) 在“hello”中搜索 "l" 只返回 "l"。...: 如果你从这个正则表达式中删除 /g,你将永远在第一个结果上创建一个无限循环。...使用 .matchAll() 好理由 在与捕获组一起使用时,它可以更加优雅,捕获组只是使用 () 提取模式正则表达式一部分。 它返回一个迭代器不是一个数组,迭代器本身是有用。...但是如前所述,由于上面提到许多原因,这是更好方法,移除 /g 不会导致无限循环

99230

JavaScript 浮点数之迷:0.1 + 0.2 为什么不等于 0.3?

最终 0.1 二进制表示为 0.00110011... 后面将会 0011 无限循环,因此二进制无法精确保存类似 0.1 这样小数。那这样无限循环不是办法,又该保存多少位呢?...IEEE 754 常用两种浮点数值表示方式为:单精确度(32位)、精确度(64位)。例如, C 语言中 float 通常是指 IEEE 单精确度, double 是指精确度。...中间值: 由于科学计数法中 E 是可以出现负数,IEEE 754 标准规定指数偏移值固定值为 ,以精度浮点数为例:,这个固定值也可以理解为中间值。同理单精度浮点数为 。...1. “0.1” 转为二进制 不知道怎么转换,参考上面 先修知识 十进制小数转二进制 0.000110011001100110011(0011) // 0011 将会无限循环 2....1111111011,E 为 11 位,最终为 01111111011 3.3 尾数位 在 IEEE 754 中,循环位就不能在无限循环下去了,在精确度 64 位下最多存储有效整数位数为 52 位

3.7K31

java 中 BigDecimal 详解「建议收藏」

首先,我们先看一下,下面这个现象 那为什么会出现这种情况呢? 因为不论是float 还是double都是浮点数,计算机是二进制,浮点数会失去一定精确度。...1、简介 Java在java.math包中提供API类BigDecimal,用来对超过16位有效位数进行精确运算。精度浮点型变量double可以处理16位有效数。...BigDecimal(double) 创建一个具有参数所指定精度对象。 //不推荐使用 BigDecimal(long) 创建一个具有参数所指定长整数值对象。...doubleValue() 将BigDecimal对象中值以精度数返回。...特别说明一下,为什么BigDecimal(double) 不推荐使用, 看上面代码运行结果,你就应该知道为什么不推荐使用了,因为用这种方式也会导致计算有问题, 为什么会出现这种情况呢?

72720

java 中对 BigDecimal 类使用详解

5.3 结论 6 除法运算可能报错原因 6.1 舍入模式 7 setScale() 8 总结 1 为什么学习这个类 因为不论是float 还是double都是浮点数,计算机是二进制,浮点数会失去一定精确度...只能无限接近于那个值 举例: 以上可以看出,两个小数相加,得到精度缺失 2 BigDecimal是什么?...Java在java.math包中提供API类BigDecimal,用来对超过16位有效位数进行精确运算。精度浮点型变量double可以处理16位有效数。...BigDecimal(double) 创建一个具有参数所指定精度对象。 //不推荐使用 BigDecimal(long) 创建一个具有参数所指定长整数值对象。...doubleValue() 将BigDecimal对象中值以精度数返回。 floatValue() 将BigDecimal对象中值以单精度数返回。

1.1K30

浮点数坑很深,但不多

要解决它也简单,在数值右边加个 f,把它从精度改成单精度就可以了: 但这并不是一个通用解决方案,比如有的时候情况会反过来:精度没有问题,精度却有问题: 要知道,这些偏差都是开发里真实会发生...这其实也是为什么在 Java 和 Kotlin 里整数默认类型虽然是更短 int (Int) 不是 long (Long),但浮点数默认类型却是更长 double (Double),不是 float...可能有点反直觉,但十进制 0.1 是无法被转换成一个有限二进制小数,它只能用一个无限循环小数来表达: 0.00011001100110011......而且,浮点数并不会真的把它当做无限循环小数来保存,而是在自己精度范围内进行截断,把它当一个有限小数来保存。这就造成了一定误差。...所以,这种计算之后出现数值偏差问题,是普遍存在,它甚至不是精度太低导致,而就是因为十进制小数无法往二进制进行完美转换所导致,不管你用多高精度都会出这种问题,只要你用是浮点数。

20810

基础数据类型

32位系统取值范围:-2**31 ~ 2**31-1 64位系统取值范围:-2**63 ~ 2**63-1 long,长整数 Python没有限制长整数型数值大小,但是由于内存限制,使用长整数数值不可能无限大...float,浮点数 有限或无限循环小数(不包含无限循环小数,如Π); 精准度,默认是17位精度,也就是小数点后16位,因为浮点数存储结构关系导致越往后精度就越不准。...str,字符串 用单引号、双引号或多引号(三个单引号或三个双引号)括起来字符都是字符串,如:'1' "1"。...在有多行字符串时必须使用多引号; 单引号和双引号没有区别,在此种情况下需要单结合:msg = "I'm is xiaoming" 字符操作 1.加号形式,很多加号拼接不建议使用,浪费内存资源; 2...注意:字符串只能跟字符串拼接,其它形式拼接都是错误。 布尔型:True和False;注意用于逻辑判断,注意区分大小写。 函数type()可以查看数据类型。

49720

原理解析 | JavaScript 计算0.1 + 0.2真的很难,看完才知道!

上图是64位精度浮点数,最高位是符号位S(sign),中间11位是指数E(exponent),剩下52位为尾数(有效数字)M(mantissa)。...S为符号位:表示浮点数正负(0代表正数,1代表负数); E为指数位:存储指数,该数都会加上一个常数(偏移量),用来表示次方数; M为尾数位:表示有效位(尾数),超出部分自动进1舍0; 精度浮点数真值...(带有正负号数值是真值)最终可以表示为: ?...1.10011001100110011001100110011001100110011001100110011......(0011无限循环) * 2^-4 根据IEEE754标准,精度浮点尾数只能存储...——> 1100110011001100110011001100110011001100110011001101 蓝色“1”是右移补位,红色0是舍去位,根据IEEE 754标准精度浮点尾数只能存储

69520

开发成长之路(1)-- C语言从入门到开发(入门篇一)

内容不限于此思维导图 文章目录 前言·鸡汤 环境搭建 编码规范 基本数据类型 标准输入输出 分支循环 分支 循环 while循环 for循环 break与continue 无限循环 ----...曾经我以为自己在这条路上已经很牛逼了,慢慢也就开始飘了,心态变了,这也导致我失去了不少东西。 曾经我以为曾经大佬们已经“作古”,后来慢慢发现,他们只是站在了更高层次,做出了自己选择罢了。...谁又不是在自己目前所处信息层面上做出选择呢,只要努力过,都会有收获。 好了好了,不扯皮了,半年之期已到,我得回去带我团队了。...%s —— 输出字符串 %f —— 以小数点形式输出单、精度实数 %e —— 以标准指数形式输出单、精度实数 %g —— 选用输出宽度较小格式输出实数 ---- 输入部分: #include<stdio.h...---- 无限循环 相信我,总有一天你会需要无限循环

40120

为什么0.1 + 0.2 不等于 0.3 ?

1/3、1/6 和 1/7 是无限循环小数,因为分母使用了 3 或 7 质因数。在二进制(计算机使用系统)中,如果一个分数使用基数(2)质因数来表示,那么它可以被精确地表示。... 1/5 (0.2) 或 1/10 (0.1) 是无限循环小数,因为分母使用了 5 或 10 质因数。所以当我们尝试表示像 0.1 这样十进制小数时,计算机会使用一个近似值。...(无限循环)。这个无限循环模式 0011 会一直重复下去,因为二进制系统只能通过这种方式来近似表示十进制中 0.1。在实际计算机系统中,这个无限循环小数会被截断为有限位数,以便存储和计算。...这就导致了在计算机中进行二进制浮点数运算时,可能会出现精度损失,从而使得 0.1 和 0.2 和不完全等于0.3。...0.3,不是原生 JavaScript 中近似值。

7310

Java Double转Bigdecimal丢失精度原因学习

这是为什么呢,以往只是知道结论知道不能这么用,也大概知道是因为double是精度导致,但是没有太关注原因。...网上在线转换工具也很多,这里不详细介绍了 第二个要知道Double数据格式,Double是精度,Float是单精度。 Double与Float数据格式是一致,但是长度不同。...注意这里指数位存储不是十进制科学计数法指数,而是二进制指数值。...二进制取整数位: 1 0.2 * 2 = 0.4 小数位继续计算 二进制取整数位: 0 开始重复 0.4 * 2 = 0.8 小数位继续计算 二进制取整数位: 0 重复 … … 一直算下去得到就是一个无限循环数...…是个无限Float(32)与Double(64)长度是有限是无法精确表示出这个数值,只能是无限接近0.1。

3.1K30

浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源

) 0.1 => 0.0001 1001 1001 1001…(无限循环) 同理0.2二进制是0.0011 0011 0011 0011…(无限循环) IEEE-745浮点数表示法存储结构 在 IEEE754...最后再把相加得到结果转为十进制  但有一些浮点数在转化为二进制时,会出现无限循环 。...比如, 十进制 0.1 转化为二进制,会得到如下结果: 0.1 => 0.0001 1001 1001 1001…(无限循环) 0.2 => 0.0011 0011 0011 0011…(无限循环)...在这之前,你更愿意使用大整数进行重要金融计算,例如,要使用整数‘分’不是使用小数‘元’进行货比单位运算 即在运算前我们把参加运算数先升级(10X次方)到整数,等运算完后再降级(0.1X次方...为什么采用二进制 二进制在电路设计中物理上更易实现,因为电子器件大多具有两种稳定状态,比如晶体管导通和截止,电压高和低,磁性有和无等。找到一个具有十个稳定状态电子器件是很困难

2.8K30

浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源

) 0.1 => 0.0001 1001 1001 1001…(无限循环) 同理0.2二进制是0.0011 0011 0011 0011…(无限循环) IEEE-745浮点数表示法存储结构 在 IEEE754...最后再把相加得到结果转为十进制 但有一些浮点数在转化为二进制时,会出现无限循环 。...比如, 十进制 0.1 转化为二进制,会得到如下结果: 0.1 => 0.0001 1001 1001 1001…(无限循环) 0.2 => 0.0011 0011 0011 0011…(无限循环)...在这之前,你更愿意使用大整数进行重要金融计算,例如,要使用整数‘分’不是使用小数‘元’进行货比单位运算 即在运算前我们把参加运算数先升级(10X次方)到整数,等运算完后再降级(0.1X次方...为什么采用二进制 二进制在电路设计中物理上更易实现,因为电子器件大多具有两种稳定状态,比如晶体管导通和截止,电压高和低,磁性有和无等。找到一个具有十个稳定状态电子器件是很困难

2.7K20

前端工程师面试题自检篇(一)

0.1二进制是0.0001100110011001100...(1100循环),0.2二进制是:0.00110011001100...(1100循环),这两个数二进制都是无限循环数。...那JavaScript是如何处理无限循环二进制小数呢?...在二进制科学表示法中,精度浮点数小数部分最多只能保留52位,再加上前面的1,其实就是保留53位有效数字,剩余需要舍去,遵从“0舍1入”原则。...由于JavaScript数字是精度数,这里就以精度数为例,它指数部分为11位,能表示范围就是0~2047,IEEE固定精度偏移量为1023。...,需要它具有一目了然嵌套层级关系,不是无差别的一铺到底写法;我们希望它具有变量特征、计算能力、循环能力等等更强可编程性,这样我们可以少写一些无用代码;可维护性上:更强可编程性意味着更优质代码结构

37930
领券