Matlab尾数基

Matlab尾数基,matlab,optimization,Matlab,Optimization,最近我一直在用matlab解决一些边值问题,我注意到了一个恼人的怪癖。假设我从区间[0,1]开始,我想在区间内搜索。当然,我们会执行二进制搜索,所以我会将间隔细分为[0,0.5]和[0.5,1]。非常好:现在假设我们将搜索范围缩小到[0.5,1]。现在我们除以区间[0.5,0.75]和[0.75,1]。还没有明显的问题。然而,随着我们的继续,在10进制中表示2的幂变得越来越不自然。例如,二进制中的2^-22仅为22位,而十进制中为16位。但是,请记住,十进制的每一位实际上都在编码~4位。换句话说

最近我一直在用matlab解决一些边值问题,我注意到了一个恼人的怪癖。假设我从区间[0,1]开始,我想在区间内搜索。当然,我们会执行二进制搜索,所以我会将间隔细分为[0,0.5]和[0.5,1]。非常好:现在假设我们将搜索范围缩小到[0.5,1]。现在我们除以区间[0.5,0.75]和[0.75,1]。还没有明显的问题。然而,随着我们的继续,在10进制中表示2的幂变得越来越不自然。例如,二进制中的2^-22仅为22位,而十进制中为16位。但是,请记住,十进制的每一位实际上都在编码~4位。换句话说,将这些分数表示为十进制是非常低效的

Matlab的精度仅扩展到16位十进制浮点数,因此二进制搜索到2^-22就足够了。但是,2^-22~10^-7比10^-16大得多,因此matlab中最好的搜索策略似乎是十进制搜索!无论如何,这就是我目前所做的:为了充分利用16位精度,我必须将间隔[0,1]细分为10个部分


希望我已经把问题说清楚了。所以,我的问题是:如何使matlab在本地二进制中计数?我想使用64位二进制浮点

16位十进制数字意味着您可以降到大约10^-16或2^-53。您可能会发现有用的Matlab在内部用二进制表示数字。十进制表示法仅用于显示。请尝试使用十六进制格式,然后查看您的数字:
2^-22=3E9000000000000
2^-40=3D7000000000000
,等等。任何二的幂都只用指数表示,尾数总是1。“我如何使matlab在本机二进制中计数”它已经做到了。浮点数在内存中表示为二进制。不知道你在问什么。我只想补充一下,如果你需要超过10^-16(或2^-53),你可以使用Matlab的VPA选项
vpa(x,d)
将使用可变精度浮点算法(vpa)计算
x
d
有效数字的精度。