タイトル | : Re^3: 科学技術計算式の表示 |
記事No | : 16234 |
投稿日 | : 2016/04/19(Tue) 22:45 |
投稿者 | : 魔界の仮面弁士 |
> 例: > 計算結果が『0.〜』の場合、『E』より後ろの数は『24』 > 計算結果が『1.〜』の場合、『E』より後ろの数は『23』
やはり「指数表記」のようですね。 指数表記では、仮数部を 1 ≦ m < 10 の範囲に「正規化」するのが一般的ですし。 (ちなみに E は exponent の意味です)
> 得たい結果は、べき乗の数が知りたかったようです。
最初の式で、「100000000000000000000000」をかけていますよね。 これは指数表記で 1.00E+23 という値を意味します。
計算時には、1.0E+23 倍して整数部を大きくしてから計算し、 表示時には、1.0E+23 で割った値を表示するということでしょう。
仮に 100000000000000000000000 倍しておかなかった場合、先の計算式は 0.0000000000000000000000125687394108575093753229057605478274314731659037191… という値になります。この値は確かに先方が求める 1.26E-23 1.25687394108575E-23 といった表記と同じ値になりますよね。
> IF文で計算結果が『0.〜』なのか『1.〜』なのかを 2 以上になることは無いのですね?
> アドバイスいただきありがとうございました。 以下、参考までに:
Dim a As Double, b As Double
a = CDbl("12345678901234600000000") b = CDbl("12345678901234567890123")
'下記はいずれも '「 1.23456789012346E+22 12345678901234600000000.00000000」 'という同じ出力になるため、一見すると違いがわかりません Debug.Print a, Format(a, "0.00000000") Debug.Print b, Format(b, "0.00000000")
'しかし下記は「True」となるので、 'a の方が大きな値を保持していることがわかります Debug.Print a > b
'両者の差異を求めてみると '本来は「32109877」となりそうではありますが '実際は「31457280」という値が返されてきます Debug.Print a - b
|