用10进制小数不能精确表示某些三进制小数
来源:互联网 发布:韩国音乐软件 编辑:程序博客网 时间:2024/04/30 06:18
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。
同理,用二进制小数也不能精确表示某些10进制小数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int
main() {
float
f;
double
d;
char
bs[65];
char
b[65];
char
s[80];
unsigned
char
*p;
char
e[12];
char
*t;
int
ex;
while
(1) {
printf
(
"Input a float point number:"
);
fflush
(stdout);
rewind
(stdin);
fgets
(s,80,stdin);
if
(1==
sscanf
(s,
"%f"
,&f) && 1==
sscanf
(s,
"%lf"
,&d))
break
;
}
printf
(
"f=%g\n"
,f);
p=(unsigned
char
*)&f;
printf
(
"hex=%02X %02X %02X %02X\n"
,p[3],p[2],p[1],p[0]);
ltoa(*(
long
*)&f,b,2);
sprintf
(bs,
"%032s"
,b);
printf
(
"bin=%s\n"
,bs);
printf
(
"bin=%.1s %.8s %s\n"
,bs,bs+1,bs+9);
strncpy
(e,bs+1,8);e[8]=0;
ex=
strtol
(e,&t,2);
printf
(
" %c %-4d-127 1.%s\n"
,(bs[0]==
'0'
)?
'+'
:
'-'
,ex,bs+9);
ex-=127;
printf
(
" %c %-8d 1.%s\n"
,(bs[0]==
'0'
)?
'+'
:
'-'
,ex,bs+9);
printf
(
"\nd=%lg\n"
,d);
p=(unsigned
char
*)&d;
printf
(
"hex=%02X %02X %02X %02X %02X %02X %02X %02X\n"
,p[7],p[6],p[5],p[4],p[3],p[2],p[1],p[0]);
_i64toa(*(
__int64
*)&d,b,2);
sprintf
(bs,
"%064s"
,b);
printf
(
"bin=%s\n"
,bs);
printf
(
"bin=%.1s %.11s %s\n"
,bs,bs+1,bs+12);
strncpy
(e,bs+1,11);e[11]=0;
ex=
strtol
(e,&t,2);
printf
(
" %c %-6d-1023 1.%s\n"
,(bs[0]==
'0'
)?
'+'
:
'-'
,ex,bs+12);
ex-=1023;
printf
(
" %c %-11d 1.%s\n"
,(bs[0]==
'0'
)?
'+'
:
'-'
,ex,bs+12);
return
0;
}
//Input a float point number:0.125
//f=0.125
//hex=3E 00 00 00
//bin=00111110000000000000000000000000
//bin=0 01111100 00000000000000000000000
// + 124 -127 1.00000000000000000000000
// + -3 1.00000000000000000000000
//
//d=0.125
//hex=3F C0 00 00 00 00 00 00
//bin=0011111111000000000000000000000000000000000000000000000000000000
//bin=0 01111111100 0000000000000000000000000000000000000000000000000000
// + 1020 -1023 1.0000000000000000000000000000000000000000000000000000
// + -3 1.0000000000000000000000000000000000000000000000000000
//
0 0
- 用10进制小数不能精确表示某些三进制小数
- 用分数精确表示小数
- 判断小数能否用32位二进制精确的表示
- 算法:用小数表示分数
- 为什么0.1无法被二进制小数精确表示?
- 小数精确相乘
- 小数的精确表达
- JS 精确小数运算
- Java精确计算小数
- js小数精确计算
- 小数精确计算
- java小数精确计算
- 10进制小数转化为任意进制小数
- 10进制纯小数转2进制小数。
- 将分数表示为任意进制的小数
- 用reinterpret_cast将10进制小数转换成16进制单精度浮点小数
- MySQL数据库 小数用百分比表示语法
- 小数的二进制表示
- acm车牌号
- 1122. Hamiltonian Cycle (25)
- Android端无线打印功能实现(附带源码Demo)
- MatLab2012b/MatLab2013b 分类器大全(svm,knn,随机森林等)
- 在Mac中配置adb
- 用10进制小数不能精确表示某些三进制小数
- android复习路之事件分发机制篇
- 测试(一)
- Leetcode 2
- VC中Source Files, Header Files, Resource Files,External Dependencies的作用
- RecycleView的多视图Epoxy库
- 字符串查重
- http://blog.csdn.net/tl792814781/article/details/51447255
- Apache介绍