相关疑难解决方法(0)

浮点精度是可变的还是不变的?

我不断得到浮点数(即float,, doublelong double)是否只有一个精度值,或者具有可以变化的精度值的混合答案.

一个名为float vs. double precision的主题似乎暗示浮点精度是绝对的.

然而,另一个叫做float和double之间差异的话题说,

通常,double具有15到16个十进制数字的精度

另一位消息人士

float类型的变量通常具有大约 7位有效数字的精度

double类型的变量通常具有大约 16位有效数字的精度

如果我正在使用敏感代码,当我的值不准确时,我不喜欢引用上面的近似值.所以让我们记录下来吧.浮点精度是可变的还是不变的,为什么?

floating-point binary decimal significant-digits floating-point-precision

38
推荐指数
7
解决办法
2373
查看次数

(276/304)*304关闭十进制舍入

如果您在编译器中放入以下代码,结果有点奇怪:

decimal x = (276/304)*304;
double y = (276/304)*304;

Console.WriteLine("decimal x = " + x);
Console.WriteLine("double y = " + y);
Run Code Online (Sandbox Code Playgroud)

结果:

十进制x = 275.99999999999999999999999

双y = 276.0

谁可以给我解释一下这个?我不明白这是怎么回事.

.net c# floating-point types

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

微控制器在malloc失败

我正在32位cortex m4微控制器上编写函数.该函数必须能够乘以不同大小的矩阵,这是我无法预测的.所以我必须使用malloc ......

但我不明白为什么我的mc在执行以下行时总是进入默认处理程序中断:

double *output2=NULL;
output2 = malloc(3 *1* sizeof(double *));
Run Code Online (Sandbox Code Playgroud)

这个mc是不是能够处理这种类型的操作?虽然这在我的笔记本电脑上工作得很好!

**编辑*

这里有一些更多的代码(仍然需要修改......):好吧所有的malocs都失败了.我无法为"malloced"数组赋值.

int main (void)
{

    /*some stuff*/

    float transFRotMatrix[3][3]={0}; //array gets modified by other functions
    float sunMeasurements[3][1] = {{1},{2},{3}}; //test values

        multiplyMatrices( &transFRotMatrix[0][0],3, 3, &sunMeasurements[0][0], 3, 1, *orbitalSunVector);

    /*some stuff*/
}

void multiplyMatrices(float *transposedMatrix, int height1, int width1, float *iSunVector,int height2, int width2, float *orbitalSunVector)
{

    int y=0;
    int x = 0;
    int row=0;
    int column =0;
    int k=0;
    int k2 = 0;
    float result = …
Run Code Online (Sandbox Code Playgroud)

c malloc microcontroller pointers

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

计算浮动的问题

奇怪的情况,当执行以下代码行时:

const float a = 47.848711;
const float b = 47.862952;
float result = b - a;
Run Code Online (Sandbox Code Playgroud)

我得到一个(NSLog%.10f)结果= 0.0142440796.

我预计会得到0.0142410000.

这是怎么回事?

iphone objective-c

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

float - c数据类型

int main() {
float a = 20000000;
float b = 1;
float c = a+b;

if (c==a) { printf("equal"); }

else { printf("not equal");}
return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我跑这个时,它说"平等".但当我将a的值更改为2000000(少一个零)时答案是否定的.为什么?

c floating-point types floating-point-precision

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

java双精度

可能重复:
浮点精度

        double a=0.000001,b=50000;
        b=a*b;
        System.out.println("double:"+b); // -> double:0.049999999999999996

        float a=0.000001f,b=50000;
        b=a*b;
        System.out.println("float"+b);  // -> float0.05
Run Code Online (Sandbox Code Playgroud)

我在代码的大部分时间里使用了double,今天我发现了这个问题.我该怎么处理?

语境:

        double []refValues= {100,75,50,25,15,5,1};

        double bInMilliGram=b*1000;
        double pickedVal=0;
        for(double ref:refValues)
            if(ref<=bInMilliGram) {
                pickedVal=ref;
                break;
            }
        System.out.println("bInMilliGram:"+bInMilliGram+", pickedVal:"+pickedVal);
Run Code Online (Sandbox Code Playgroud)

o/p: - > bInMilliGram:49.99999999999999,pickedVal:25.0

java floating-point

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

精度与精度的含义 双类型范围

首先,请允许我承认我是一名经验丰富的程序员,拥有超过 10 年的编程经验。然而,我在这里问的问题是自从大约十年前我第一次拿起一本关于 C 的书以来一直困扰着我的问题。

\n\n

下面是一本关于Python的书的摘录,解释了Python的浮动类型。

\n\n
\n

浮点数使用机器上浮点数的本机双精度(64 位)表示形式来表示。通常这是 IEEE 754,它提供大约 17 位精度和范围在 \xe2\x80\x93308 到 \n 308 的指数。这与 C 中的 double 类型相同。

\n
\n\n

我一直不明白这句话的含义

\n\n
\n

“...提供大约 17 位精度和 \n 指数,范围为 \xe2\x80\x93308 到 308 ...”

\n
\n\n

我的直觉在这里误入歧途,因为我可以理解精度的含义,但范围怎么可能与此不同。我的意思是,如果一个浮点数可以表示最多 17 位的值(即最多 1,000,000,000,000,000,00 - 1),那么指数怎么可能是 +308。如果指数为 10,这不会产生 308 位数字;如果指数为 2,这不会产生大约 100 位数字。

\n\n

我希望我能够表达我的困惑。

\n\n

问候\nVaid,阿布舍克

\n

double ieee-754 floating

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

精确的Ruby数学运算问题

你知道如何解决数学精度的以下问题吗?

p RUBY_VERSION # => "1.9.1"
p 0.1%1 # => 0.1
p 1.1%1 # => 0.1
p 90.0%1 # => 0.0
p 90.1%1 # => 0.0999999999999943
p 900.1%1 # => 0.100000000000023

p RUBY_VERSION # => "1.9.2"
p 0.1%1 # => 0.1
p 1.1%1 # => 0.10000000000000009
p 90.0%1 # => 0.0
p 90.1%1 # => 0.09999999999999432
p 900.1%1 # => 0.10000000000002274
Run Code Online (Sandbox Code Playgroud)

ruby math precision rounding

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

斯卡拉.浮点数的奇怪结果

为什么要减去时,我得到了奇怪的结果2.99999...3

scala> math.sqrt(3)
res0: Double = 1.7320508075688772

scala> math.pow(res0, 2)
res1: Double = 2.9999999999999996

scala> 3 - res1
res2: Double = 4.440892098500626E-16
Run Code Online (Sandbox Code Playgroud)

java scala

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