1

質問: Small および Visual Basic で Double Float 値を作成することは可能ですか?


私は Small/Visual Basic で double float 値を作成しようとしました (両方の場合と同様)...
そして、私は常に運がありません..私は常に次のようなエラーで終了します:

    at System.Decimal..ctor(Double value)
    at System.Decimal.op_Explicit(Double value)
    at Microsoft.SmallBasic.Library.Primitive.op_Implicit(Double value)
    at _SmallBasicProgram._Main()

または、Visual Basic で実行します。

overflow


それで、二重の非整数 (10 進数) 精度浮動小数点数を作成する方法はありますか?
コード (私が試した) は次のとおりです。

Small Basic:

var1 = 18446744073709551615
var2 = 1797693134862315800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

(ええ、ゼロの数については申し訳ありません.. 303 個です。) Visual Basic

では:

Module experiment_doesDoubleFloat_workModule
    Dim var1, var2 As Double
    Sub Main()
        var1 = 18446744073709551615
        var2 = 1797693134862315800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    End Sub
End Module

私は何かを台無しにしていますか?
また、どのタグが実際にこれに適合するのかもわかりません... (smallbasic タグは別として)

4

2 に答える 2

3

これが機能しない理由は、コンパイラにIntegerフォーマットで定数を効果的に与えており、コンパイラが巨大な整数を浮動小数点値に変換しようとしているためです。300 桁を超える値が標準データ型に収まる最大の整数よりも大きいため、これは失敗します。

コードで定数値を割り当てたい場合は、コンパイラが解析できる形式である必要があります。つまり、次のようになります。

 var1 = 1.8446744073709552E+19
 var2 = 1.7976931348623157E+308

実際、次のように入力すると、次のようになります。

 var1 = 1.8446744073709551615E+19

値は自動的に次のように変換されます。

 var1 = 1.8446744073709552E+19

double元の値には、形式が対応できる精度よりも高い精度が含まれているためです。また、コードサンプルのゼロの数を数えませんでしたが、303個の場合、これは の値になりvar2 = 1.797... E+319、これもdouble. 292 個のゼロを使用すると、値は...E+308上記のように になり、これは表現可能な最大の倍精度浮動小数点値です。

コード内の値が十分に小さくてInteger. それを見てください:

var1 = 9223372036854775807  ' << largest Int64

正常にコンパイルされますが、もう 1 つ

var1 = 9223372036854775808

失敗します。


さらに読むために

すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと

于 2014-06-12T13:34:36.580 に答える