LoginSignup
4
1

More than 5 years have passed since last update.

1D3 = 1000?

Posted at

はじまり

ある日友人から「VBAで1D3が1000で評価されるんだけど」というチャットが来た。1E3ならわかるけど1D3……? HAHAHAそんな馬鹿なと思いやってみると、

イミディエイトウィンドウから
print(1E3)
 1000 
print(1D3)
 1000 

マジやん……。

調べた

ほかの文字

1A3から1Z3までの26種の組み合わせを調べてみる。

Sub test()
    Dim c As String
    For i = 0 To 25
        c = Chr(i + 65)
        s = "1" + c + "3"
        If IsNumeric(s) Then
            Debug.Print (s + ": Number")
        Else
            Debug.Print (s + ": String")
        End If
    Next i
End Sub
1A3: String
1B3: String
1C3: String
1D3: Number
1E3: Number
1F3: String
1G3: String
1H3: String
1I3: String
1J3: String
1K3: String
1L3: String
1M3: String
1N3: String
1O3: String
1P3: String
1Q3: String
1R3: String
1S3: String
1T3: String
1U3: String
1V3: String
1W3: String
1X3: String
1Y3: String
1Z3: String

どうもDとEは特別な働きをしているようである。しかしEは指数表記としては有名だけど、Dとはなんぞや?

ネットの海から拾った情報たち

調べてみると次の質問サイトに手掛かりがあった。

IsNumeric関数に関連して。

BASICでは、倍精度実数の指数表現にはD 単精度実数の指数表現にはE が使われていましたが、
Visual Basicでは、共に倍精度浮動小数点型実数値として処理されます。

なるほどなー。昔のBASICの名残なのか。
そう思ったら次のサイトにはどうも違うことが書いてあった。

VBA, как проще всего определить, число или текст? - Планета Excel

ロシア語のサイトだけど、翻訳しつつ読むとどうもFortranの名残らしい……。

どっちだ⁉

さらに昔へ

BASICと検索したらVBのことしか出てこないこの世の中で、素のBASICについて検索するのは骨が折れるが、96年発行の冊子がヒットした。

文系学生のためのBASIC

ここの95ページに

倍精度型実数では、指数部の前にDをつけて次のように表示します.

とある。掲示板に書かれていたのは正しいみたい。

次にFortranで探してみると、次のサイトに記述があった。

Fortran入門

倍精度を表す場合には "e" の部分を "d" とします。

ということでBASICにもFortranにも同様の機能があることがわかった。どちらに影響を受けたのかはともかく(おそらくFortran→BASIC→VBA?)、昔はこうやって単精度と倍精度を区別していたんだなあ、という思わぬ歴史のお勉強になったのでした。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1