相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

0.1 + 0.2 == 0.3  ->  false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2         ->  0.30000000000000004
Run Code Online (Sandbox Code Playgroud)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

为什么在MATLAB中24.0000不等于24.0000?

我正在编写一个程序,我需要删除存储在矩阵中的重复点.问题在于,当检查这些点是否在矩阵中时,MATLAB不能在矩阵中识别它们,尽管它们存在.

在以下代码中,intersections函数获取交集点:

[points(:,1), points(:,2)] = intersections(...
    obj.modifiedVGVertices(1,:), obj.modifiedVGVertices(2,:), ...
    [vertex1(1) vertex2(1)], [vertex1(2) vertex2(2)]);
Run Code Online (Sandbox Code Playgroud)

结果:

>> points
points =
   12.0000   15.0000
   33.0000   24.0000
   33.0000   24.0000

>> vertex1
vertex1 =
    12
    15

>> vertex2    
vertex2 =
    33
    24
Run Code Online (Sandbox Code Playgroud)

应从结果中消除两点(vertex1vertex2).它应该通过以下命令完成:

points = points((points(:,1) ~= vertex1(1)) | (points(:,2) ~= vertex1(2)), :);
points = points((points(:,1) ~= vertex2(1)) | (points(:,2) ~= vertex2(2)), :);
Run Code Online (Sandbox Code Playgroud)

在这之后,我们有了这个意想不到的结果:

>> points
points =
   33.0000   24.0000
Run Code Online (Sandbox Code Playgroud)

结果应该是一个空矩阵.如你所见,第一对(或第二对)[33.0000 24.0000]已被淘汰,但不是第二对.

然后我检查了这两个表达式:

>> points(1) ~= vertex2(1)
ans …
Run Code Online (Sandbox Code Playgroud)

floating-point precision matlab

67
推荐指数
4
解决办法
2万
查看次数

为什么这个sql查询没有返回任何比较浮点数的结果?

我在mysql表中有这个:

在此输入图像描述

id并且bolag_idint.lat并且lngitudedouble.

如果我使用该lngitude列,则不返回任何结果:

lngitude查询: SELECT * FROM location_forslag WHERE lngitude= 13.8461208

但是,如果我使用该lat列,它返回结果:

lat查询: SELECT * FROM location_forslag WHERE lat= 58.3902782

lngitude栏有什么问题?

mysql double

9
推荐指数
1
解决办法
1万
查看次数

为什么我不能乘以浮动?

可能重复:
处理浮点数中的精度问题

我很惊讶为什么我试图在C中使用浮点数(使用GCC 3.2)并且它没有按照我的预期进行.作为示例:

int main() {
  float nb = 3.11f;
  nb *= 10;
  printf("%f\n", nb);
}
Run Code Online (Sandbox Code Playgroud)

显示:31.099998

我对浮动的实现方式及其产生这种意外行为的原因感到好奇吗?

c floating-point floating-accuracy

7
推荐指数
2
解决办法
1万
查看次数

红宝石算术

为什么7.30 - 7.20ruby中的代码会返回0.0999999999999996,不是0.10吗?

但是,如果我会写7.30 - 7.16,例如,一切都会好的,我会得到的0.14.

问题是什么,我该如何解决?

ruby math floating-point ieee-754

6
推荐指数
2
解决办法
3146
查看次数

MS SQL Float十进制比较问题

我正在规范化数据库,其中一部分涉及将列从一个表转换FLOAT为a DECIMAL(28,18).然后,当我尝试将此已转换的列连接回源列时,在某些情况下它不会返回任何结果.

它似乎与它转变的方式有关.例如, FLOAT转换为a DECIMAL(28,18)产生:

51.051643260000006000
Run Code Online (Sandbox Code Playgroud)

原来FLOAT

51.05164326
Run Code Online (Sandbox Code Playgroud)

我尝试了各种修改方法FLOAT,但这些方法都没有:

CAST(51.05164326 AS DECIMAL(28,18)) = 51.051643260000000000
STR(51.05164326 , 28,18) = 51.0516432599999990
Run Code Online (Sandbox Code Playgroud)

转换的原因是由于提高了这些字段的准确性.

有没有人有一个一致的策略来转换这些数字,并能够确保后续的连接工作?

提前致谢

厘米

t-sql comparison decimal

4
推荐指数
1
解决办法
2万
查看次数

0.699 x 100 = 69.89999999999999?

可能重复:
为什么99.99/100 = 0.9998999999999999
处理浮点数的精度问题

我在php和javascript中看到过这个问题.我有这个号码:float 0.699

如果我这样做:0.699 x 100 = 69.89999999999999

为什么?

编辑

round(0.699 x 10, 2):float 69.90000000000001

javascript php math decimal floating-accuracy

1
推荐指数
2
解决办法
516
查看次数

计算64 int的百分比

我有以下代码:

typedef __int64 BIG_INT;
typedef double CUT_TYPE;

#define CUT_IT(amount, percent) (amount * percent)

void main()
{
    CUT_TYPE cut_percent = 1;

    BIG_INT bintOriginal = 0x1FFFFFFFFFFFFFF;
    BIG_INT bintAfter = CUT_IT(bintOriginal, cut_percent);
}
Run Code Online (Sandbox Code Playgroud)

bintAfter计算后的值是144115188075855872而不是144115188075855871(最后见"2",而不是"1"??).

在较小的值,如0xFFFFFFFFFFFFF,我得到正确的结果.
如何在32位应用程序上运行它?我需要考虑什么?
我的目标是削减一个非常大的数字的一定比例.

我使用VC++ 2008,Vista.

c c++ math

1
推荐指数
1
解决办法
549
查看次数

C++浮点存储

可能重复:
处理浮点数中的精度问题

码:

float flt = 78983636;  // stores 78983632. as seen in debugger
flt = 79282056;        // stores 79282056.
Run Code Online (Sandbox Code Playgroud)

为什么它不能准确存储第一个值,但能够为更大的第二个值?

c++ floating-point

1
推荐指数
1
解决办法
918
查看次数

C/C++程序中数字的浮点表示中的垃圾比特

可能重复:
JavaScript的数学是否被破坏?
处理浮点数中的精度问题

考虑下面的代码及其输出:

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
#include <limits>
#include <vector>


int main(int argc, char *argv[])
{
  double xleft  = 0;
  double xright = 1.0;

  double dx = 0.1;
  std::cout << std::setprecision(36) << "dx is " << dx << std::endl; 

  int numgridpts = ((int) ceil (( xright - xleft )/dx))  + 1; 


  for (int i = 0; i < numgridpts  ; ++i)
    {
      std::cout << std::setprecision(36) << xleft + i*dx << std::endl;
    }

  return 0; …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point floating-accuracy

1
推荐指数
1
解决办法
1119
查看次数

为什么99.99/100 = 0.9998999999999999

可能重复:
处理浮点数中的精度问题

而99.99*0.01 = 0.99

显然这是一个古老的浮点舍入问题,但是这种情况下的舍入误差对我来说似乎很大; 我的意思是我可能预期结果为0.99990000001或某些类似的'接近'结果.

为了记录,我在JavaVM和.Net环境中得到了相同的答案.

floating-point rounding-error floating-accuracy

0
推荐指数
1
解决办法
1270
查看次数

python中的浮点精度

任何理由c都不应该等于0.321?

>>> from math import ceil
>>> a = 123.321
>>> b = a % 60
>>> b
3.320999999999998
>>> ceil(b)
4.0
>>> c = ceil(b) - b
>>> c
0.679000000000002
Run Code Online (Sandbox Code Playgroud)

更新:

对于任何想知道我如何获得我正在寻找的价值的人:

>>> c = b - floor(b)
Run Code Online (Sandbox Code Playgroud)

python floating-point

-1
推荐指数
1
解决办法
528
查看次数