相关疑难解决方法(0)

最重要的十进制数字精度是否可以转换为二进制并返回到十进制而不会丢失重要性6或7.225?

我遇到了两种不同的浮点数精度公式.

⌊(N-1)log 10(2)⌋= 6位小数(单精度)

N log 10(2)≈7.225十进制数字(单精度)

其中N = 24个有效位(单精度)

第一个公式位于由W. Kahan教授撰写的" IEEE标准754二进制浮点运算 " 第4页的顶部.

第二个公式可以在维基百科文章" 单精度浮点格式 "的IEEE 754单精度二进制浮点格式:binary32下找到.

对于第一个公式,W.Kahan教授说

如果十进制字符串最多为6 sig.(分解). 转换为Single,然后转换回相同数量的sig.dec.,那么最后的字符串应该与原始字符串匹配.

对于第二个公式,维基百科说

...总精度为24位(相当于log 10(2 24)≈7.225十进制数字).

两个公式(6和7.225十进制数字)的结果是不同的,我希望它们是相同的,因为我假设它们都是为了表示最有效的十进制数字,可以转换为浮点二进制,然后转换回来十进制,其开头的有效十进制数字相同.

为什么这两个数字不同,什么是最重要的十进制数字精度可以转换为二进制并返回到十进制而不会失去重要性?

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

21
推荐指数
2
解决办法
2614
查看次数

浮点数的十进制精度

相当于log10(2 ^ 24)≈7.225十进制数字

维基百科

精度:7位数

MSDN

6

std::numeric_limits<float>::digits10
Run Code Online (Sandbox Code Playgroud)

为什么numeric_limits在这里返回6?维基百科和MSDN都报告浮点数具有7个十进制数字的精度.

floating-point

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

max_digits10的目的是什么?它与digits10的不同之处是什么?

我对什么max_digits10代表感到困惑.根据其文档,对于所有整数类型,它为0.浮点类型的公式max_digits10看起来类似于int's digits10'.

c++ precision numeric-limits floating-point-precision c++11

11
推荐指数
2
解决办法
2404
查看次数

为什么浮动变量通过以奇怪的方式在点之后切割数字来节省值?

我有这个简单的代码行:

float val = 123456.123456;
Run Code Online (Sandbox Code Playgroud)

当我打印此val或查看范围时,它存储值123456.13

好吧,没关系,它不能在4个字节之后存储所有那些数字,但为什么它在点之后产生13?不应该是12吗?

(在win32上使用vc ++ 2010 express)

c++ floating-point digits ieee-754 floating-point-precision

9
推荐指数
3
解决办法
910
查看次数

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