encoding - 用于大量小数位的类型的 TCL 编码
问题描述
我只是想知道根据 Unicode 标准,我需要使用什么格式将无理数显示到大于 16 的小数位。
我试过这样的事情:
set var [expr [format %.1000f 1] / [format %.1000f 9]]
而且仍然只能得到 1/9 到 16 位小数。
我需要为 x < 1000 增加 1/x 并查看所有小数位(最多至少为 1000)。
有小费吗 ?
解决方案
Tcl 的本机浮点数学使用 IEEE 双精度浮点数;那些只有大约 15 个左右有意义的有效数字(尾数中实际上有 53 位)。相反,您需要使用任意精度的浮点算术包。Tcllib 有一个math::bigfloat
:
package require math::bigfloat
namespace import math::bigfloat::*
# How many digits do we want
set places 1000
set x [fromstr 1.0 $places]
set y [fromstr 9.0 $places]
set z [div $x $y]
puts [tostr $z]
你也可以math::exact
从 Tcllib 中使用,它在内部做的事情有点不同(你在最后的输出中指定你想要的精度):
package require math::exact
namespace import math::exact::exactexpr
# This package uses *binary* precision, not decimal
set precision [expr {ceil(log(10)/log(2) * 1000)}]
set x [[exactexpr 1] ref]
set y [[exactexpr 9] ref]
set z [[exactexpr {$x / $y}] ref]
$z asFloat $precision
这ref
与引用计数管理有关,因为表达式对象在内部是不平凡的。
推荐阅读
- ios - 加载具有多种配置的不同 .xcassets(.xcconfig 文件)
- javascript - 如何限制用户输入低于某个值的值?
- ios - 为什么不支持带有来自 Storyboard 本地化的属性字符串的 UILabel?
- matlab - 使用 Matlab 在指定 bin 中重新分配直方图类型数据
- html - 如何结合 Boostrap Carousel 和 Jquery animate()
- css - Style.Visibility 不允许元素做动画?
- javascript - 比较数组中的对象,合并具有相同属性值的重复项,将属性值添加到合并的对象中
- javascript - 如何处理 Typescript 中等待获取的对象
- vue.js - VueJs 过渡不作为动态组件工作
- r - 如何将置信区间添加到散点图中以对两个变量进行回归?