多线程如何克服浮点数计算不准确的缺点?

问题描述

多线程如何克服浮点数计算不准确的缺点?

多线程浮点数的累加和求均方差,如何克服浮点数计算不准确的缺点,计算结果存在不确定性怎么解决?

解决方案

浮点数存在存储的精度误差和进制转换误差,如果你要提高精度,可以考虑用字符数组模拟手工十进制计算,但是性能会比较低。

解决方案二:

那要看你是什么语言,什么开发环境了?在java中,有一个BigDecimal可以提供精确的数值计算的。

时间: 2024-11-08 01:06:14

多线程如何克服浮点数计算不准确的缺点?的相关文章

PHP中浮点数计算比较及取整不准确的解决方法

浮点数计算结果比较 一则浮点数计算例子如下:   代码如下: $a = 0.2+0.7; $b = 0.9; var_dump($a == $b);   打印出的结果是:bool(false).也就是说在这里 0.2+0.7 的计算结果与 0.9 并不相等,这显然是有违我们的常识的. 对此问题,PHP官方手册曾又说明:显然简单的十进制分数如 0.2 不能在不丢失一点点精度的情况下转换为内部二进制的格式.这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数.例如,十进制的 1/3 变成

PHP中浮点数计算比较及取整不准确的解决方法_php基础

浮点数计算结果比较一则浮点数计算例子如下: 复制代码 代码如下: $a = 0.2+0.7; $b = 0.9; var_dump($a == $b); 打印出的结果是:bool(false).也就是说在这里 0.2+0.7 的计算结果与 0.9 并不相等,这显然是有违我们的常识的. 对此问题,PHP官方手册曾又说明:显然简单的十进制分数如 0.2 不能在不丢失一点点精度的情况下转换为内部二进制的格式.这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数.例如,十进制的 1/3 变成

Vim技能修炼教程(16) - 浮点数计算函数

浮点数计算函数 这一节的所有函数,只有在vim编译时支持了+float时才有效. 三角函数 sin() : sine正弦函数 cos() : cosine余弦函数 tan() : tangent正切函数 asin() : arc sine反正弦函数 acos() : arc cosine反余弦函数 atan() : arc tangent反正切函数 atan2({X坐标},{Y坐标}) : arc tangent反正切函数 sinh() : hyperbolic sine 双曲正弦函数 cosh

php中浮点数计算问题

  如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个bug,是跨语言的,我用python也遇到这个问题.所以基本上大部分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面达内php培训老师介绍一下一些常用的BC高精确度函数使用. 例子  代码如下   <?php    $f = 0.58;    var_dump(intva

php中浮点数计算问题整理

如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个bug,是跨语言的,我用python也遇到这个问题.所以基本上大部分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面达内php培训老师介绍一下一些常用的BC高精确度函数使用. 例子  代码如下 复制代码 <?php    $f = 0.58;    var_dump(intv

为什么php的浮点数运算不准确

关于php浮点数,经常遇见预算不准确的情况 例子: //例子 $a = 10.601; $b = 10.6009; echo $a- $b; // 结果如下 0.00010000000000154 结果错误,why? why 根本原因, 在某些情况下,2 进制无法精确表示 10 进制的小数部分. 把 10 进制转化为 2 进制,需要进行如下换换算,下面以10.601为例 整数部分 连续用该整数除以2,取余数,然后商再除以2,直到商等于0为止.然后把得到的各个余数按相反的顺序排列.简称"除2取余法

excel计算年龄准确到几岁几月几天

一.符合如下的条件 1岁以上写岁 1月以上写月, 不足月写天. 二.宏代码 Function GetDateDiff(StartD, EndD) Dim y%, m%, d% If StartD > EndD Or Not IsDate(StartD) Or Not IsDate(EndD) Then GetDateDiff = "数据有误" y = DateDiff("yyyy", StartD, EndD) If DateSerial(Year(EndD)

我必须得告诉大家的MySQL优化原理

说起MySQL的查询优化,相信大家收藏了一堆奇淫技巧:不能使用 SELECT * .不使用NULL字段.合理创建索引.为字段选择合适的数据类型-.. 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必.因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用. MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图

用java实现浮点数的精确计算

问题的提出: 如果我们编译运行下面这个程序会看到什么? public class Test{ public static void main(String args[]){ System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.out.println(123.3/100); }}; 你没有看错!结果确实是 0.060000000000000005 0.5