求助ieee754浮点数的问题
发布网友
发布时间:2022-05-20 21:10
我来回答
共2个回答
热心网友
时间:2023-11-27 01:28
你说的这网址我打不开。刚巧我回答了另一个人的浮点数的问题:网页链接,你看一下
下面进行计算,先计算:1920/1080=1.777777777777778
转换为2进制数:1.110001110001110001110001,小数点左侧只有1,所以指数=0
转换过程:
n 1/2^n n位上的2进制值
1 0.500000000000000000000000000 1
2 0.250000000000000000000000000 1
3 0.125000000000000000000000000 0
4 0.062500000000000000000000000 0
5 0.031250000000000000000000000 0
6 0.015625000000000000000000000 1
7 0.007812500000000000000000000 1
8 0.003906250000000000000000000 1
9 0.001953125000000000000000000 0
10 0.000976562500000000000000000 0
11 0.000488281250000000000000000 0
12 0.000244140625000000000000000 1
13 0.000122070312500000000000000 1
14 0.000061035156250000000000000 1
15 0.000030517578125000000000000 0
16 0.000015258789062500000000000 0
17 0.000007629394531250000000000 0
18 0.000003814697265625000000000 1
19 0.000001907348632812500000000 1
20 0.000000953674316406250000000 1
21 0.000000476837158203125000000 0
22 0.000000238418579101562500000 0
23 0.000000119209289550781250000 0
24 0.000000059604644775390625000 1 ---取前23位
所以浮点数就是:0 01111111 11000111000111000111000 ,化为16进制:3FE38E38
最后有个1的差异,是计算机精度的缘故。如果把第24位舍入到23位,就和你在那个网站上计算得结果一样了。
反向验算:1.7777776718139648,与原数对比,第7位开始,已经不准确了。
同理,3840/1080=3.5555555555555555555555555555556
化为2进制:11.1000111000111000111000111000B,左移1位,1.11000111000111000111000111000,指数是1
1 0.500000000000000000000000000 1
2 0.250000000000000000000000000 0
3 0.125000000000000000000000000 0
4 0.062500000000000000000000000 0
5 0.031250000000000000000000000 1
6 0.015625000000000000000000000 1
7 0.007812500000000000000000000 1
8 0.003906250000000000000000000 0
9 0.001953125000000000000000000 0
10 0.000976562500000000000000000 0
11 0.000488281250000000000000000 1
12 0.000244140625000000000000000 1
13 0.000122070312500000000000000 1
14 0.000061035156250000000000000 0
15 0.000030517578125000000000000 0
16 0.000015258789062500000000000 0
17 0.000007629394531250000000000 1
18 0.000003814697265625000000000 1
19 0.000001907348632812500000000 1
20 0.000000953674316406250000000 0
21 0.000000476837158203125000000 0
22 0.000000238418579101562500000 0
23 0.000000119209289550781250000 1
24 0.000000059604644775390625000 1
则浮点数:
0 1000 0000 11000111000111000111000 16进制:40638e38。
反向验算这个数值,是3.5555553436279297,可见32位浮点数的精度只有小数点后6,7位而已。
附:小数转2进制字符串代码,反向验算代码
浮点转2进制:
#include <stdio.h>
#include <math.h>
int main() {
int i;
double d = 3840.0/1080, a;
d = d-(int)d;
for (i=1;i<=24;i++) {
a = 1.0/pow(2, i);
//printf("%d", d>a?1:0); //这个查看最终结果
printf("%2d %0.27f %d\n", i, a, d>a?1:0); //这个显示过程
if (d>a) d-=a;
}
}
//反向验算:
#include <stdio.h>
#include <math.h>
int main() {
unsigned a = 0x3FE38E38;
float b = *(float*)&a;
printf("%.32f", b);
}
回答你这题,还真够辛苦。
追问十分感谢耐心解答
热心网友
时间:2023-11-27 01:29
这是计算屏幕的宽度和高度的比率:
1920÷1080=1.777777... 用16进制浮点数表示就是 3FE38E39,反过来就是 398EE33F
2560÷1080=2.370370... 用16进制浮点数表示就是 4017B426,反过来就是 26B41740
3840÷1080=3.555555... 用16进制浮点数表示就是 40638E39,反过来就是 398E6340追问太感谢了,我这就试试
你好请问这些分辨率是怎么算出来的呢?是用什么工具程序吗如果是的话可以告诉一下叫什么吗?想自制更多分辨率的东西,因为那个网址我输入xx分辨率/xx分辨率显示不出来换算出来的码是多少。还是说那个网址上,这样输入不正确呢?