VB单精度、双精度浮点数误差,如何消除

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB单精度、双精度浮点数误差,如何消除相关的知识,希望对你有一定的参考价值。

Dim i, j As Single, e '如果j为变体或货币型都不会出错。
e = 16280
For i = 10430 To 11630 Step 10 '如果10430和11630是由公式计算出来的,就会很明显的看出10860*1.5=16289.9987053871这样的错误
For j = 1.4 To 1.56 Step 0.01
If i * j >= e And i * j < e + 10 Then List1.AddItem i & " * " & j & "=" & i * j & CStr(i * j < 16290) '错误看10860*1.5这行
Next
Next

'以上用到一个listbox控件
'问题是已经知道解决方法,那么VB单精度,双精度型存在有什么意义? 变体型在这个测试中通过,有没有其他测试能证明变体型不如单双精度准确的?

浮点数的存在是完全有必要、不可或缺的。电脑由于设计上的特点,它是不可能精确储存一个无限小数(比如说圆周率)的,否则的话一台电脑上的全部内存空间都不够用来储存一个数字!因此,电脑就用浮点数来近似表示一个实数,其中单精度浮点数(Single)占用4个字节,可表示7位有效数字(比如说圆周率用Single型表示就是3.141593),双精度浮点数(Double)占用8个字节,可表示15位有效数字(圆周率的Double型值为3.14159265358979)。正因为它是“近似值”,所以浮点数的运算难免会产生误差,这个是不可避免的,而且这也不是VB的“罪”,在所有程序设计语言中都是存在的(当然,不同的语言可能有不同的规避措施,VB也许在这方面做得不够好)。
货币型(占用8个字节)是一种特殊的数据类型,它看起来像浮点数(因为可带小数),但其实它是定点数(因为它的小数位是固定4位的)。它在运算时会先把自己转换为整数(小数点右移4位),运算后再转为小数(小数点左移4位),所以它的运算是精确运算,不存在浮点误差的问题。但是,由于货币的特殊性,货币型只能有4位小数,因此当小数位超过4位时就不适合用货币型了。
变体型属于“万金油”数据类型,可接受任何数据类型,而且它会自动根据数值的特点自动选择适合的数据类型参与运算,如果数值不含小数,它会自动按整数处理;如果数值所含小数不多于4位,它会按货币型处理(这就是为什么你的程序用变体型不会产生误差的原因);如果小数位大于4,就按浮点数处理(也就是说你的程序处理的数据如果大于4位小数,用变体型一样会产生误差的)。但是,变体型属于VB的“畸形产物”(其他高级语言中是没有这样的类型的),除了刚入门的初学者,一般不建议使用变体型。因为变体型为了适应各种数据类型,它要占用16个字节的内存空间(也就是说一个变体型变量即使值为0,它也要占用16个字节),这会严重浪费宝贵的系统资源,严重影响程序的运行效率,而且有可能会产生一些意料之外的错误(这里就不赘述了)。所以,千万不要以为变体型简单、好用,一个程序中如果大量使用变体型变量,那么可以肯定的是,这个程序会显得非常业余,一点也不专业!
综上所述,使用浮点数并不是因为它“准确”,而是当你处理的数据含有小数(尤其是大于4位的小数)时,你只能选择浮点数来计算了,别无选择!其次,浮点运算误差是不可避免的,只能通过其他措施尽量减小误差的影响。此外,变体型并不是一种独立的数据类型,它会根据需要自动转为整数、货币型、浮点数等,所以所谓“变体型不如单双精度准确”之类的提法也是错误的。
参考技术A 更年期综合症是由雌激素水平下降而引起的一系列症状。更年期妇女,由于卵巢功能减退,垂体功能亢进,分泌过多的促性腺激素,引起植物神经功能紊乱,从而出现一系列程度不同的症状,如月经变化、面色潮红、心悸、失眠、乏力、抑郁、多虑、情绪不稳定,易激动,注意力难于集中等,称为“更年期综合症。”大多数妇女由于卵巢功能减退比较缓慢,机体自身调节和代偿足以适应这种变化,或仅有轻微症状。中医认为更年期综合征是肾气不足,天癸衰少,以至阴阳平衡失调造成。因此在治疗时,以补肾气、调整阴阳为主要方法。要是患了这样的病建议你还是早点去医院看看,目前对本病的治的话,可以到成♂♂都♂南♂亚♂♂医♂学♂研♂究♂所去看看,我姑姑就是在那里治疗好的,效果还不错,就是在 四川省成♂都市金牛区永陵路18号(成♂都永陵博物馆往黄河商业城方向走120米即到)

病情分析:
更年期是每个人必经的年龄阶段。更年期综合症是女性更年期特有的表现症状。
更年期综合症是由雌激素水平下降而引起的一系列症状。更年期妇女,由于卵巢功能减退,垂体功能亢进,分泌过多的促性腺激素,引起植物神经功能紊乱,从而出现一系列程度不同的症状,如月经变化、面色潮红、心悸、失眠、乏力、抑郁、多虑、情绪不稳定,易激动,注意力难于集中等,称为“更年期综合症。”大多数妇女由于卵巢功能减退比较缓慢,机体自身调节和代偿足以适应这种变化,或仅有轻微症状。中医认为更年期综合征是肾气不足,天癸衰少,以至阴阳平衡失调造成。因此在治疗时,以补肾气、调整阴阳为主要方法。少数妇女由于机体不能很快适应,症状比较明显,但一般并不需特殊治疗。极少数症状严重,甚至影响生活和工作者,则需要药物治疗。 一般认为,妇女进入更年期后,家庭和社会环境的变化都可加重其身体和精神负担,使更年期综合症易于发生或使原来已有的某些症状加重。有些本身精神状态不稳定的妇女,更年期综合症就更为明显,甚至喜怒无常。 更年期综合症虽然是由于性生理变化所致,但发病率高低与个人经历和心理负担有直接关系。对心理比较敏感的更年期妇女来说,生理上的不适更易引起心理的变化,于是出现了各种更年期症状。因此,注意心理调适十分重要。 
指导意见:
建议如果情势严重的话 请到正规大医院就诊 最重要的是放松心情 祝你健康

你好,女性更年期综合症较为常见,其常表现为四大症状:潮热,心悸,精神、神经症状异常,腰酸背痛。女性更年期是指卵巢功能从旺盛状态到逐渐衰退直至消失的一个过渡期,此时常会引起妇女生理和心理方面的一系列变化,建议口服敏尧依能静胶囊2~3个月,保养卵巢提升卵巢源动力,调理月经,同时也可缓解更年期综合症,推迟绝经期的到来。
参考技术B 更年期综合症是由雌激素水平下降而引起的一系列症状。更年期妇女,由于卵巢功能减退,垂体功能亢进,分泌过多的促性腺激素,引起植物神经功能紊乱,从而出现一系列程度不同的症状,如月经变化、面色潮红、心悸、失眠、乏力、抑郁、多虑、情绪不稳定,易激动,注意力难于集中等,称为“更年期综合症。”大多数妇女由于卵巢功能减退比较缓慢,机体自身调节和代偿足以适应这种变化,或仅有轻微症状。中医认为更年期综合征是肾气不足,天癸衰少,以至阴阳平衡失调造成。因此在治疗时,以补肾气、调整阴阳为主要方法。要是患了这样的病建议你还是早点去医院看看,目前对本病的治的话,可以到成♂♂都♂南♂亚♂♂医♂学♂研♂究♂所去看看,我姑姑就是在那里治疗好的,效果还不错,就是在 四川省成♂都市金牛区永陵路18号(成♂都永陵博物馆往黄河商业城方向走120米即到)

病情分析:
更年期是每个人必经的年龄阶段。更年期综合症是女性更年期特有的表现症状。
更年期综合症是由雌激素水平下降而引起的一系列症状。更年期妇女,由于卵巢功能减退,垂体功能亢进,分泌过多的促性腺激素,引起植物神经功能紊乱,从而出现一系列程度不同的症状,如月经变化、面色潮红、心悸、失眠、乏力、抑郁、多虑、情绪不稳定,易激动,注意力难于集中等,称为“更年期综合症。”大多数妇女由于卵巢功能减退比较缓慢,机体自身调节和代偿足以适应这种变化,或仅有轻微症状。中医认为更年期综合征是肾气不足,天癸衰少,以至阴阳平衡失调造成。因此在治疗时,以补肾气、调整阴阳为主要方法。少数妇女由于机体不能很快适应,症状比较明显,但一般并不需特殊治疗。极少数症状严重,甚至影响生活和工作者,则需要药物治疗。 一般认为,妇女进入更年期后,家庭和社会环境的变化都可加重其身体和精神负担,使更年期综合症易于发生或使原来已有的某些症状加重。有些本身精神状态不稳定的妇女,更年期综合症就更为明显,甚至喜怒无常。 更年期综合症虽然是由于性生理变化所致,但发病率高低与个人经历和心理负担有直接关系。对心理比较敏感的更年期妇女来说,生理上的不适更易引起心理的变化,于是出现了各种更年期症状。因此,注意心理调适十分重要。 
指导意见:
建议如果情势严重的话 请到正规大医院就诊 最重要的是放松心情 祝你健康

你好,女性更年期综合症较为常见,其常表现为四大症状:潮热,心悸,精神、神经症状异常,腰酸背痛。女性更年期是指卵巢功能从旺盛状态到逐渐衰退直至消失的一个过渡期,此时常会引起妇女生理和心理方面的一系列变化,建议口服敏尧依能静胶囊2~3个月,保养卵巢提升卵巢源动力,调理月经,同时也可缓解更年期综合症,推迟绝经期的到来。

以上是关于VB单精度、双精度浮点数误差,如何消除的主要内容,如果未能解决你的问题,请参考以下文章

python浮点数精度问题

008_浮点数误差问题

浮点数精度上误差

取一个双精度浮点数,并输出它(保留小数点后8位),

如何正确地将作为 CSV 文件中字符串的浮点数/双精度数作为浮点数/双精度数导入程序?

js 双精度浮点数