我一直试图找出原因,但我不能.有谁能够帮我?
请看下面的例子.
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
我不明白使用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而不是数字,我保留在第一位?
有人知道为什么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可以表示为双精度浮点数或单精度浮点数,因此我不明白为什么x和x_d不一样.他们远比x+eps(x).我想也许Matlab试图x_d通过有理分数近似来计算出双精度,但是调用rat(x,16)并没有给出相同的结果x_d.我很无能为力.有谁知道这里发生了什么?
我有一个关于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').
如果有人能够比我上面的书更详细地解释这一点,我将非常感激!