tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: 科学技術計算式の表示
投稿日: 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。