相关疑难解决方法(0)

可影响double的最大小数位数

考虑形式为d1.d2d3d4d5 ... dnExxx的十进制表示形式,其中xxx是任意指数,d1和dn都是非零的.

是否已知最大n,使得存在十进制表示d1.d2d3d4d5 ... dnExxx,使得间隔(d1.d2d3d4d5 ... dnExxx,d1.d2d3d4d5 ...((dn)+1)Exxx)包含IEEE 754双?

n应至少为17.问题是17岁以上多少.

这个数字n与在十进制到双重转换中足够考虑的位数有关,例如strtod().我查看了David M. Gay实现的源代码,希望在那里找到答案.有一个暗示"40",但不清楚这是否是一个合理的数学结果或只是一个统计上安全的界限.此外,关于"截断"的注释使其听起来像0.50000000000000000000000000000000000000000000000000000001可以在向上舍入模式中转换为0.5.

Musl的实现似乎读取了大约125*9位数,这是很多.然后它切换到"粘性"模式:

if (c!='0') x[KMAX-4] |= 1;
Run Code Online (Sandbox Code Playgroud)

最后,当用"包含两个连续IEEE 754双打的中点"替换"包含IEEE 754双"时,答案如何变化?

floating-point ieee-754

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

如何指定setprecision舍入

当流到std输出时,我可以指定setprecision来舍入double值吗?

ofile << std::setprecision(12) << total_run_time/TIME << "\n";
Run Code Online (Sandbox Code Playgroud)

输出: 0.756247615801

ofile << std::setprecision(6)<< total_run_time/TIME << "\n";
Run Code Online (Sandbox Code Playgroud)

输出: 0.756248

但我需要输出为 0.756247

谢谢

c++ floating-point

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

sybase 15.7浮点数到数字舍入错误

任何人都可以解释以下内容,这对我来说只是一个bug:

select convert(numeric(8,4), convert(float, '12.4155499999999996418864611769'))

12.4156
Run Code Online (Sandbox Code Playgroud)

当然答案应该是12.4155.为了仔细检查,我创建了一个表MyTab,其中包含一个sybase"float"列,并插入了"12.4155499999999996418864611769".然后使用转换转储十六进制并得到0x4028D4C2F837B4A2.这确实是我插入的字符串的IEEE 754双精度表示.然后,如果我(如上所述)将其转换为数字(8,4),则给出12.4156.

我认为这是错误的,还是我生气了?

floating-point sybase-ase

4
推荐指数
1
解决办法
4813
查看次数

标签 统计

floating-point ×3

c++ ×1

ieee-754 ×1

sybase-ase ×1