与 gnuplot 格式说明符 %t 和 %T 不一致?

Posted

技术标签:

【中文标题】与 gnuplot 格式说明符 %t 和 %T 不一致?【英文标题】:Inconsistency with gnuplot format specifiers %t and %T? 【发布时间】:2019-03-12 20:37:00 【问题描述】:

如果您使用 gnuplot 格式说明符 %t%T,您将观察到一些不一致的行为。

### gnuplot format specifiers

Numbers = "94 95 99 100 101"

do for [n in Numbers] 
    print gprintf("%3g",n)." = ".gprintf("%t",n)." x 10^".gprintf("%T",n)


Mantissa(n) = real(n)/10**floor(log10(n))
Power(n) = floor(log10(n))
do for [n in Numbers] 
    print gprintf("%3g",n)." = ",Mantissa(n)," x 10^",Power(n)

### end of code

结果:

 94 = 9.400000 x 10^1
 95 = 0.950000 x 10^2
 99 = 0.990000 x 10^2
100 = 1.000000 x 10^2
101 = 1.010000 x 10^2
 94 = 9.4 x 10^1
 95 = 9.5 x 10^1
 99 = 9.9 x 10^1
100 = 1.0 x 10^2
101 = 1.01 x 10^2

例如,为什么95 显示为0.95 x 10^2 而不是9.5 x 10^1? 这背后的原因是什么?

【问题讨论】:

【参考方案1】:

实际上,除了gprintf("%t",95)gprintf("%T",95) 没有显示预期的尾数和幂之外,公式floor(log10(n)) 有时也无法显示n 的正确幂。 (见这里:gnuplot: how to get correct order of magnitude?)

解决方法建议:以下公式通过字符串格式绕道而行,但至少它们应该始终给出正确的尾数和幂。

Mantissa(n) = real(sprintf("%.15e",n)[1:strstrt(sprintf("%.15e",n),"e")-1])

Power(n) = int(sprintf("%.15e",n)[strstrt(sprintf("%.15e",n),"e")+1:])

从长远来看,gprintf("%t",...)gprintf("%T",...) 函数应该在 gnuplot 源代码中修复。

【讨论】:

以上是关于与 gnuplot 格式说明符 %t 和 %T 不一致?的主要内容,如果未能解决你的问题,请参考以下文章

在 Gnuplot 中关闭科学记数法

傅里叶级数系数​​ gnuplot

uint32_t 和 size_t 的 printf 格式说明符

gnuplot:如何为数字 1-999 获得 %c 零空间?

gnuplot:如何在轴上使用 a*(10^b) 格式

如何在Gnuplot 5中制作GIF动画