繁体   English   中英

如何在Matlab中得到科学记数的指数

[英]How to get Exponent of Scientific Notation in Matlab

当数字非常小时,Matlab会自动将它们格式化为科学记数法。

例:

A = rand(3) / 10000000000000000;

A =

  1.0e-016 *

    0.6340    0.1077    0.6477
    0.3012    0.7984    0.0551
    0.5830    0.8751    0.9386

是否有一些内置函数返回指数? 像: getExponent(A) = -16

我知道这是一个愚蠢的问题,但我需要检查数百个矩阵,我似乎无法弄明白。

谢谢您的帮助。

基础数学可以告诉你:

floor(log10(N))

数字的对数基数10告诉您大约在该数字前面的小数位数。

例如, 999871234598237549.998E+016

log10(99987123459823754)16.9999441 ,其底部是16 - 它基本上可以告诉你“科学记数法中的指数是16,非常接近17”。

地板总是向下舍入,所以你不必担心小指数:

0.000000000003754 = 3.754E-012
log10(0.000000000003754) = -11.425
floor(log10(0.000000000003754)) = -12

您可以使用log10(A) 用于打印输出的指数将是A中最大的指数。如果你只关心小数(<1),你可以使用

min(floor(log10(A)))

但如果它们也可能很大,你会想要这样的东西:

a = log10(A);
[v i] = max(ceil(abs(a)));
exponent = v * sign(a(i));

这将找到最大绝对指数,并返回该指数。 因此,如果A = [1e-6 1e20] ,它将返回20。

我实际上不确定Matlab如何确定打印时使用的指数。 显然,如果A接近于1(例如A = [100, 203] ),那么它根本不会使用指数,但是这个解决方案将返回2.你必须稍微使用它才能确切地计算出来打印矩阵的规则是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM