标签: floating-point-precision

为什么在Float上调用to_i会从值中减去一个?

我有一个案例,我在Float对象上做一些数学运算,当我调用to_i时,它被减少一个.

value = 0.29 * 100
value.to_i
=> 28
Run Code Online (Sandbox Code Playgroud)

我知道浮点数是不精确的表示,但这比我预期的要多.发生了什么事,我该如何防止这种情况发生?

我正在使用ruby 1.8.7(它也发生在1.8.6).

ruby floating-point-precision

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

一轮浮动值

我正在设计一个收银机,我必须比较2个浮点值,每次比较时我都会收到错误.ie因为我无法将最多2位小数的差值四舍五入并将其与值进行比较.

例如.如果客户支付的金额为60.36且发出的账单为30.24,则差异为30.120001.我甚至尝试使用floor函数将其四舍五入为二位数:floorf(diff*100 + .5)/ 100; 但它不起作用.

我应该如何舍入十进制数字并将其用于设计收银机?

c floating-point floating-point-precision

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

boost erf()中的L(长)后缀:何时需要,何时不需要?

在Boost中实现了erf功能

在此输入图像描述

<boost/math/special_functions/erf.hpp>我们有一个标题

result = z * 1.125 + z * 0.003379167095512573896158903121545171688L;
Run Code Online (Sandbox Code Playgroud)

在下面附带的代码段中.我的问题是:为什么没有

大号

这个加法的第一个组成部分中的长后缀,而第二个中有一个?它背后的理由是什么?它带来了什么影响?

template <class T, class Policy>
T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t)
{
   BOOST_MATH_STD_USING
   BOOST_MATH_INSTRUMENT_CODE("113-bit precision erf_imp called");

   if(z < 0){
      if(!invert)
         return -erf_imp(-z, invert, pol, t);
      else if(z < -0.5)
         return 2 - erf_imp(-z, invert, pol, t);
      else
         return 1 + erf_imp(-z, false, pol, t);
   }

   T result;

   // Big bunch of selection statements now
   if(z < 0.5){
      // …
Run Code Online (Sandbox Code Playgroud)

c++ math floating-point boost floating-point-precision

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

在 JavaScript 中:1.1 - 1 = 0.10000000000000009

什么样的错误?我该如何解决?

1.1 - 1 = 0.10000000000000009

1.0000001+1 = 2.0000001000000003

javascript floating-point-precision

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

如何检查2个浮点数是否相等(有一些给定的误差值)?

我知道如何检查两个浮点数是否almost相等,简单代码:

bool compare(double a, double b)
{
    if(fabs(a - b) < (1.0 / 10000000))
        return true;
    else
        return false;
}
Run Code Online (Sandbox Code Playgroud)

但是当我有一些随机数据时,让我们说9.0和9.5,或者9.4我希望将它们视为相同数字,如何做到这一点?我的意思是,他们不相等,但我可以允许一些小错误+/- 0.5.有任何想法吗?

有了这个错误,我可以处理数字:

9.1 and 9.0 
3.1 and 3.6
-4.2 and -4.6
Run Code Online (Sandbox Code Playgroud)

平等的

c floating-point floating-point-precision

0
推荐指数
2
解决办法
1562
查看次数

Awk:列号长度

我有一个(也许)愚蠢的问题.

我的数据:文件1

1234.34  a 1235.34 d
3456.23  b 3457.23 e
2325.89  c 2327.89 f 
Run Code Online (Sandbox Code Playgroud)

我想要类似的东西

awk '{if($1==$3) print $4}'
Run Code Online (Sandbox Code Playgroud)

但是当然如果我这样做,它什么都不会打印出来.所以我想修改$ 3的"精度"(在这种情况下)

从某种意义上说,当awk读取$ 3时,它会发现:

124
345
232
Run Code Online (Sandbox Code Playgroud)

那它必须是一种方法来做到这一点,但我不知道.

awk '{if($1==(three digits precision $3)) print $4}'
Run Code Online (Sandbox Code Playgroud)

救命?

bash awk floating-point-precision

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

为什么这个精度失败的例子显示双精度而不是浮点数?

还有,为什么浮点不应使用货币的操作和可爱的例子给出的SO的大讨论在这里从Bloch的Effective Java的.

我正在玩这个,发现一些奇怪的东西.如果数字是双倍的:

System.out.println(1.03d - .42d); 
//prints out 0.6100000000000001.
Run Code Online (Sandbox Code Playgroud)

但是,如果数字是浮点数:

System.out.println(1.03f - .42f); 
//prints out 0.61.
Run Code Online (Sandbox Code Playgroud)

为什么这对浮子也不会以同样的方式失败?两种类型都容易出现同样的问题,但是导致行为差异的原因是什么?

java floating-point double floating-point-precision

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

将 2^31 分配给 float 或 double

我必须将整数值乘以 2^31。我用谷歌搜索了一下,看起来双打的范围在 2.23e-308 <= |X| 之间 使用 64 位时 <= 1.79e308,并且是 1.18e-38 <= |X| 之间的浮点数 <= 3.40e38。

这比我需要的要多得多。但这不起作用。

我的头文件中有这个常量值:

static const float SCALE_FACTOR = 2^-31;
Run Code Online (Sandbox Code Playgroud)

如果那么我就这样做:

float dummy = SCALE_FACTOR;
Run Code Online (Sandbox Code Playgroud)

那么,dummy 的值为 11。

我不知道问题是否在于分配这样的常量值,但我不知道如何在不损失精度的情况下编写它。

有什么帮助吗?

编辑:抱歉,愚蠢的问题。我的 MatLab 背景背叛了我,忘记了 ^ 在 C++ 中不是用于求幂。我已投票结束。

c++ floating-point double double-precision floating-point-precision

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

is_float未检测到浮点数

我正在is_float()检查输入的数字是否是浮点数,但echo()输入时它会不断抛出该消息3.00。还有其他解决方案吗?还是我做错了什么?

这是我的代码:

PHP:

if(!is_float($_POST["gpa"])){
    echo "GPA must be in #.## format.";
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<input type="text" name="gpa" />
Run Code Online (Sandbox Code Playgroud)

php forms floating-point floating-point-precision

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

Python数学精度

我在python中尝试了这个简单的数学运算

>>> math.floor(8.2-0.21)
7.0
>>> math.floor(8.21-0.2)
8.0
>>> math.floor(8.2-0.2)
7.0
Run Code Online (Sandbox Code Playgroud)

第三个应该返回8但是返回7?!

UPDATE

我在PHP,ruby和JAVA中尝试过,我得到了相同的结果.

更新2 我不知道为什么这个问题得到很多投票!

python math floating-point floating-point-precision

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

表示长双值

我想知道如何在long double中重新创建一个值.是L还是LF.我问这个,因为在某些地方我读过它是L和一些LF.在其中一个考试答案和一些像indiabix这样的网站中它是L并且在一些堆栈溢出帖子中它的LF.

c printf floating-point-precision

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

Python:2.2*3.0 = 6.6000000000000005

我的问题更多是关于为什么在C++,C#和VB中

std::cout<<2.2f*3.0f<<std::endl; //prints 6.6
Run Code Online (Sandbox Code Playgroud)

在Python,Java和Ruby中

2.2*3.0 //prints 6.6000000000000005
Run Code Online (Sandbox Code Playgroud)

我对内存中的浮点表示非常熟悉.我检查过,事实上2.2无法用单精度精确表示在内存中.

但是为什么C++,C#和VB在打印值时会切断结果中不相关的部分而其他部分却没有?

python multiplication floating-point-precision

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

如何在android中使用double获得精确位的答案

我已经在android上制作了一个计算器应用程序,但每当我做一些这样的乘法:

23.3 x 3.3
Run Code Online (Sandbox Code Playgroud)

我得到的答案是这样的:

76.988999999999
Run Code Online (Sandbox Code Playgroud)

现在请告诉我如何使用此应用程序解决此冲突.答案应该是这样的

76.89
Run Code Online (Sandbox Code Playgroud)

java double android floating-accuracy floating-point-precision

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