5倍速!メールマガジン
外部アカウントで登録
受講生の声
新着の講座投稿
新着の講座コメント
新着のノート投稿
投稿一覧へ新着のノートコメント
表示できる投稿はありません。
サイト運営者紹介
小川 慶一講師/教材/システム開発者紹介
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
kurosukeさんの投稿
(投稿ID: 4781)
引数Valueには「11000000101010000000000100000000」が渡される想定です。戻り値を長整数型にしているので、数値は範囲内だと思いますが、オーバーフローの解消方法をご教授頂けないでしょうか。
小川 慶一さんのコメント
(コメントID: 6688)
おはようございます。
> オーバーフローの解消方法をご教授頂けないでしょうか
という以前に、いろいろ問題がありますので、この関数を呼び出すプロシージャを含めた全体を紹介していただけますか。
というのは、この関数は文字列を受け取るとしていますが、
> 引数Valueには「11000000101010000000000100000000」が渡される想定です。
ということなので、実際には長整数型の値を関数に渡そうとしているように見えるからです。
実際にやってみるとわかりますが、
たとえば、
等と書こうとしても、以下のように表示されてしまいます。
あと、以下のように書いてCallTheFuncを実行しようとしても、実行時エラーがでて関数での処理まで進めないはずです。
(エラーメッセージはご自身でお確かめください)
ということなので、「オーバーフローの解消方法をご教授頂けないでしょうか」という以前のこととして、いろいろあますので。
よろしく、お願いいたします。
小川 慶一さんのコメント
(コメントID: 6689)
追記です。
2進数の b11000000101010000000000100000000 は、10進数に直すと 3,232,235,776 です。
一方、長整数型の取りうる最大値は 2,147,483,647 です。なのでオーバーフローになってしまうのは仕方ないですね。
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/data-type-summary
Long型でも扱えない数値は、Double型に格納します。最近だとLongLong型等の型もあるようですので、これを使ってもOKです。
以下に、 double型、longlong型、long型で同じ処理を書いた場合のサンプルを示します。関数として切り出すところはご自身でやってください。
受講生さんのコメント
(コメントID: 6693)
ご返信ありがとうございます。
> 2進数の b11000000101010000000000100000000 は、10進数に直すと 3,232,235,776 です。
⇒一桁少なり見間違えており、長整数型の範囲内と思ってしまいました。
仰る通り、オーバーフローするのは想定通りだと認識致しました。
また、double型に変更し、試した結果、期待値の動作となりました。
長整数型で扱えない数値はdouble型やlonglong型で対応する点が勉強になりました。
ありがとうございました。
小川慶一さん:
> kurosukeさん:
>
> 追記です。
>
> 2進数の b11000000101010000000000100000000 は、10進数に直すと 3,232,235,776 です。
> 一方、長整数型の取りうる最大値は 2,147,483,647 です。なのでオーバーフローになってしまうのは仕方ないですね。
> https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/data-type-summary
>
> Long型でも扱えない数値は、Double型に格納します。最近だとLongLong型等の型もあるようですので、これを使ってもOKです。
> 以下に、 double型、longlong型、long型で同じ処理を書いた場合のサンプルを示します。関数として切り出すところはご自身でやってください。
>
>
>
受講生さんのコメント
(コメントID: 6694)
ご返信ありがとうございます。
> 2進数の b11000000101010000000000100000000 は、10進数に直すと 3,232,235,776 です。
⇒一桁少なり見間違えており、長整数型の範囲内と思ってしまいました。
仰る通り、オーバーフローするのは想定通りだと認識致しました。
また、double型に変更し、試した結果、期待値の動作となりました。
長整数型で扱えない数値はdouble型やlonglong型で対応する点が勉強になりました。
ありがとうございました。
小川慶一さん:
> kurosukeさん:
>
> 追記です。
>
> 2進数の b11000000101010000000000100000000 は、10進数に直すと 3,232,235,776 です。
> 一方、長整数型の取りうる最大値は 2,147,483,647 です。なのでオーバーフローになってしまうのは仕方ないですね。
> https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/data-type-summary
>
> Long型でも扱えない数値は、Double型に格納します。最近だとLongLong型等の型もあるようですので、これを使ってもOKです。
> 以下に、 double型、longlong型、long型で同じ処理を書いた場合のサンプルを示します。関数として切り出すところはご自身でやってください。
>
>
>
小川 慶一さんのコメント
(コメントID: 6695)
こんにちは。
解決したようで良かったです (^^
LongLong型は、正直、僕も今回調べてはじめてその存在を知りました。
おそらく64bitマシンではLongLong型がInteger型、Long型より高速だろうなという気はします。が、整数を扱うデータ型がたくさんあっても戸惑いますし、整数については、エクセル作業であれば行番号すべてに対応できるものがあれば十分かなと思います。
僕ならDouble型を使いたいです。
ひきつづきよろしくお願いいたします。