相关疑难解决方法(0)

为什么从float转换为double会改变这个值?

我一直试图找出原因,但我不能.有谁能够帮我?

请看下面的例子.

float f = 125.32f;
System.out.println("value of f = " + f);
double d = (double) 125.32f; 
System.out.println("value of d = " + d);
Run Code Online (Sandbox Code Playgroud)

这是输出:

值f = 125.32

值d = 125.31999969482422

java floating-point precision double ieee-754

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

在MATLAB中使用sprintf显示变量的小数

我不明白使用sprintf命令发生的下一件事.

>> vpa(exp(1),53)

ans =

2.7182818284590455348848081484902650117874145507812500


>> e = 2.7182818284590455348848081484902650117874145507812500

e =

2.7183

>> sprintf('%0.53f', e)

ans =

2.71828182845904550000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

为什么sprintf要向我显示数字e而不是数字,我保留在第一位?

variables matlab printf decimal

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

Matlab单双转换错误

有人知道为什么double()在Matlab(R2016a)中使用单精度浮点数进行投射会改变最后的数字吗?这是一个例子:

format 'long'
x=3.2530601; %arbitrary single precision number
x_s=single(x);
x_d=double(x_s);
Run Code Online (Sandbox Code Playgroud)

如果我查看变量的类和值,我可以看到以下内容: x并且x_d是双倍的,x_s是预期的单个.价值观是:

x=3.253060100000000
x_s=3.2530601
x_d=3.253060102462769
Run Code Online (Sandbox Code Playgroud)

由于数字3.2530601可以表示为双精度浮点数或单精度浮点数,因此我不明白为什么xx_d不一样.他们远比x+eps(x).我想也许Matlab试图x_d通过有理分数近似来计算出双精度,但是调用rat(x,16)并没有给出相同的结果x_d.我很无能为力.有谁知道这里发生了什么?

floating-point precision double matlab casting

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

MatLab - 变量精度算术

我有一个关于vpa可用于评估MatLab中符号表达式的命令的简短问题.

我的教科书说明如下:

"使用诸如sqrt数字之类的函数时需要小心,默认情况下会产生双精度浮点数.您需要将此类输入vpa作为符号字符串传递给正确的评估:vpa('sqrt(5)/pi')."

我不太明白这里的行话.为什么对于大多数输入我得到确切同样的答案我是否键入vpa(input)vpa('input'),而不是平方根?例如,如果我输入vpa(sin(pi/4))或者vpa('sin(pi/4)'),我得到完全相同的答案,但如果我输入上面给出的问题vpa(sqrt(5)/pi),我得到的答案与我输入时的答案相同vpa('sqrt(5)/pi').

如果有人能够比我上面的书更详细地解释这一点,我将非常感激!

matlab numbers arbitrary-precision

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