标签: floating-point-precision

为什么我的浮点值会丢失精度并丢弃小数?示例代码如下

我之前从未使用过漂浮物,而我正在进行的当前项目需要它们.我得到了几年前我学到的奇怪问题,但却忘记了为什么会这样.

乘以或添加浮点数后的结果不是它们应该的结果.

这是我的代码:

void main ()
{
    //Example 1 - ERROR
    float a=16937.6;
    float b=112918;
    float total=b+a;
    cout<<total<<endl; //Outputs 129896 - rounds up and loses decimal (129855.6)

    //Example 2 - Error
    float c=247.82;
    float d=9995.2;
    float total2=c+d;
    cout<<total2<<endl; //Outputs 10243 - loses all decimals (10243.02)
    system ("pause");

}
Run Code Online (Sandbox Code Playgroud)

c++ math floating-point-precision

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

如何在R中获得精确的低p值(来自F检验)

我正在计算R中F检验的p值,它似乎无法显示低于1e-16的任何值.例如,对于F值从80到90,自由度1,200:

> 1-pf(80:90,1,200)
 [1] 2.220446e-16 2.220446e-16 1.110223e-16 1.110223e-16 0.000000e+00 0.000000e+00 0.000000e+00
 [8] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
Run Code Online (Sandbox Code Playgroud)

如何提高pf()函数计算的精度?

r floating-point-precision

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

指定小数点后的数字

 a = '60.950'
 b = a.to_f

 puts a # => 60.950
 puts b # => 60.95
Run Code Online (Sandbox Code Playgroud)

我想每次在小数点后显示三位数.我怎么能0在结束时强行b

ruby floating-point precision floating-point-precision

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

Python 2.7.5中的浮点精度变化

如果我在Python 2.7.5控制台中运行以下代码:

>>> import math
>>> math.radians(0.000001)
Run Code Online (Sandbox Code Playgroud)

我明白了

1.7453292519943295e-08
Run Code Online (Sandbox Code Playgroud)

但是,如果我将相同的代码放在一个文件中:

$ cat floatingtest.py
import math
print(math.radians(0.000001))
Run Code Online (Sandbox Code Playgroud)

运行它,我得到:

$ python.exe floatingtest.py
1.74532925199e-08
Run Code Online (Sandbox Code Playgroud)

为什么在脚本中运行代码与在控制台中运行代码时浮点精度的差异?

(Python 3.3似乎没有这个'问题'.两种方式都返回相同的高精度值.)

python python-2.7 floating-point-precision

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

C#Math.pow()返回Infinity?

我在c#return infinity中遇到Math.pow问题,例如:

  double a=65;
  double b=331;
  Console.Write(Math.Pow(a,b));
  //but return infinty 
Run Code Online (Sandbox Code Playgroud)

但我的电脑计算器不返回65 ^ 331无穷大有实数返回此:1.1866456424809823888425970808655e + 600

我使用强制转换为(长)但结果不同于Windows计算器请我需要变量类型返回相同的窗口计算器

c# double casting return floating-point-precision

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

为什么FloatToText在不同的项目中返回不同的值?

我正在使用FloatToText这种方式:

function ExFloatToStr(Value: Extended): string;
var
  Buffer: array[0..63] of Char;
  FormatSettings: TFormatSettings;
begin
  GetLocaleFormatSettings(GetUserDefaultLCID, FormatSettings);
  SetString(Result, Buffer, FloatToText(Buffer, Value, fvExtended, ffGeneral,
    18, 0, FormatSettings));
end;
Run Code Online (Sandbox Code Playgroud)

如果我传递给这个函数值9229.99,它返回一个字符串值9229.9900000000016,但它不是我想要的.当我创建一个新项目并在那里复制上面的代码时,它运行良好.它返回9229.99.

他们在不同项目中工作的原因可能是什么?

delphi floating-point floating-point-precision

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

设定精度和浮点数

运行以下代码,我希望收到这样的输出:

Desired output:
Car     Hours    Charge
1        1.5      2.00
2        4.0      2.50
3       24.0     10.00
Run Code Online (Sandbox Code Playgroud)

但是结果如下:

Actual output:
Car     Hours    Charge
1        2       2
2        4       2.5 
3    2e+01      10
Run Code Online (Sandbox Code Playgroud)

欢迎提供任何可以指导我使用正确的浮点比较和正确使用setprecision的建议

int main()
{
    double hour[3];
    double charge[3];

    double sum_hour = 0;
    double sum_charge = 0;

    for (int i = 0; i < 3; i++)
    {
        cout<<"Enter the hours for car No. "<<i<<": ";
        cin>>hour [i];

        if (hour [i] <= 3)
            {charge [i] = 2.00;}
        if …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point-precision

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

带有OpenGL渲染和GLSL的“ GL_HALF_FLOAT”

我正在用C ++编写OpenGL渲染器。我希望它尽可能高效,并且每个顶点/法线/ UV tex坐标/切线/等都占用尽可能少的内存。我正在使用索引,线带和风扇。我以为32位浮点数不是必需的,而16位浮点数应该没问题,至少对于其中一些像法线和UV而言。我似乎在任何地方都找不到任何示例。我可以找到“ GL_HALF_FLOAT”的话题,但没有真实的例子。我在正确的轨道上吗?还是不值得一看?如果有人知道这样的示例,他们可以发送源代码链接吗?

opengl renderer glsl floating-point-precision

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

使用float而不是double时输出奇怪

当我使用float而不是使用奇怪的输出double

#include <stdio.h>
void main()
{
    double p,p1,cost,cost1=30;
    for (p = 0.1; p < 10;p=p+0.1)
    {
        cost = 30-6*p+p*p;
        if (cost<cost1)
        {
            cost1=cost;
            p1=p;
        }
        else
        {
            break;
        }
        printf("%lf\t%lf\n",p,cost);
    }
    printf("%lf\t%lf\n",p1,cost1);
}
Run Code Online (Sandbox Code Playgroud)

如预期

按预期输出p= 3;

但是当我使用float输出时有点奇怪.

#include <stdio.h>
void main()
{
    float p,p1,cost,cost1=40;
    for (p = 0.1; p < 10;p=p+0.1)
    {
        cost = 30-6*p+p*p;
        if (cost<cost1)
        {
            cost1=cost;
            p1=p;
        }
        else
        {
            break;
        }
        printf("%f\t%f\n",p,cost);
    }
    printf("%f\t%f\n",p1,cost1);
}
Run Code Online (Sandbox Code Playgroud)

奇怪的增量风格

为什么p第二种情况下的增量在2.7之后变得奇怪?

c floating-point floating-point-precision

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

使用GMP精确损失

我有一个程序,从字符串中读取数字到mpz_t,然后将其转换为mpf_t.尽管从文件中正确读取,但是当我将它们转换为mpf_t时会出现精度损失.代码如下:

#include <gmp.h>
#include <stdlib.h>
#include <stdio.h>

int main (int argc, char **argv) {
    char* str = "632512364206354367378453";
    mpz_t x;

    mpz_init_set_str(x, str, 10);

    mpf_t a;
    mpf_init(a);
    mpf_set_z(a, x);
    gmp_printf("mpz_t: %Zd\n", x);
    gmp_printf("mpf_t: %Ff\n", a);
}
Run Code Online (Sandbox Code Playgroud)

此示例的输出是:

mpz_t: 632512364206354367378453
mpf_t: 632512364206354367378000.000000
Run Code Online (Sandbox Code Playgroud)

如您所见,最后3位数字不正确.我怎么能避免这个?还有其他功能可以执行此转换吗?

谢谢

c c++ precision gmp floating-point-precision

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