ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 14:39

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2006年2月07日(火) 23:28 
ver 4.04を使っています。
Double型への値の代入について教えて下さい。

Double型の変数Dに下のように値をセットしました。
コード:
#prompt

 Dim D As Double

 D=2147483647+1

 Print "D=";D
 このとき表示される値は、
2147483647+1=「2147483648」
だと思ったのですが、
実際の実行結果は
「-2147483648」
と符号が負になってしまいます。

仮に代入時に
D=2147483648 と入れればもちろん
そのまま正の数として表示されます。

Long型ならこのような実行結果になっても分かるような
気はするのですが。
 Double型でどうしてこうなるのか分からないでいます。
お知りの方がおられましたらよろしくお願いします。


通報する
ページトップ
   
投稿記事Posted: 2006年2月08日(水) 12:34 
オフライン

登録日時: 2005年5月31日(火) 10:52
記事: 264
お住まい: 高知
最新版をお使いください。

現在最新のバージョンは4.20です。


通報する
ページトップ
投稿記事Posted: 2006年2月09日(木) 23:56 
NoWestさん、レスありがとうございます。
HPから新しいバージョン(ver4.13)をダウンロードして実行してみたら
代入の結果はうまく「2147483648」と表示されました。

(ver4.20を、とも思ったのですが、「64ビットコンパイラ」ということで
よく分からないのですが自分の環境(WinMe)で使えるのかなとちょっと
躊躇してしまって・・)

代入結果は正しく表示されているので改めてこれを使っていきたいと
思っています。

ありがとうございました。
返信遅れてすみません。またよろしくお願いします。


通報する
ページトップ
   
投稿記事Posted: 2006年2月10日(金) 01:56 
それが、、、
ver4.13では今までver4.04で作ったプロジェクトは上手く実行
されないみたいで。
ver4.04で青や黄色の四角を描いていたものがver4.13では
真っ白になってしまったり、TextOutで表示される文字フォントや
その大きさが変わってしまったり。場合によってはデバッグ実行の
速度がかなりゆっくりになってしまったり。
 ver4.04とver4.13は少し違うみたいですね。

 困ったのは一度ver4.13で開いたものを再びver4.04で
開こうとすると、「プロジェクトが壊れています」。
ファイルのバックアップを取ってからやるべきだったと反省しつつ、
困ったなー、と。
(開けなくなったものは全て別のテキストエディタで開いて
そこから改めてver4.04で新規作成のプロジェクトにコピーして
復旧出来ました。)

 今HPのバージョンアップの履歴を見ながらどうしようか
あれこれ考えてはいるのですが、ちょっと当面バージョンの更新は
待った方がいいのかなと思っています。

 そもそもの質問だったDouble型への値の代入については
なんとかプログラムの組み方で乗りれればと考えています。

バージョンアップはもっと慎重にやらないと、バックアップくらい
取っとかんとダメですね。
 いずれにしても、ありがとうございました。またよろしくお願いします。


通報する
ページトップ
   
投稿記事Posted: 2006年2月10日(金) 11:04 
オフライン

登録日時: 2005年5月31日(火) 22:17
記事: 27
お住まい: 山口
>
コード:
> #prompt
> 
>  Dim D As Double
> 
>  D=2147483647+1
> 
>  Print "D=";D
> 
>
>  このとき表示される値は、
> 2147483647+1=「2147483648」
> だと思ったのですが、
> 実際の実行結果は
> 「-2147483648」
> と符号が負になってしまいます。
>
> 仮に代入時に
> D=2147483648 と入れればもちろん
> そのまま正の数として表示されます。
>
> Long型ならこのような実行結果になっても分かるような
> 気はするのですが。
Ver4.20を使っても同じことです。
例えば
コード:
#prompt
Dim D As Double

D = 18446744073709551616 + 1

Print "D=";D
とすれば希望(?)の結果は得られないでしょう。
(変わったことは,64bitで計算しているので桁あふれが先に伸びただけのことです。)

なぜなら、
先に,2147483647+1がLong型として計算されます。
ご存知のとおり、2の補数表現では
&h00000000 0
&h00000001 1
:
:
&H7FFFFFF 2147483647
&H70000000 -2147483648
&H70000001 -2147483647
:
&HFFFFFFFF -1
と符号化されています。
ですから当然、
2147483647+1 が -2147483648 になるのは正しい結果です。

2147483647+1をdouble型で計算したい場合は、
2147483647.0 + 1
2147483647 + 1.0
2147483647.0 + 1.0
または、As doubleで型変換をしてください。

4.04では実装されていませんが、
#strict
をつけるなら、
データが失われる危険があることを、コンパイラーが警告します。

_________________
今日も元気にABLife


通報する
ページトップ
投稿記事Posted: 2006年2月12日(日) 00:10 
レスありがとうございます。
引用:
Ver4.20を使っても同じことです。
なぜなら、
先に,2147483647+1がLong型として計算されます。
自分がver4.13で試したところでは
2147483647+1で「2147483648」を返してくれたので
ここのところの動作の違いは厳密には
まだ僕には分からないままです。

それから、
引用:
2147483647+1をdouble型で計算したい場合は、
2147483647.0 + 1
2147483647 + 1.0
2147483647.0 + 1.0
または、As doubleで型変換をしてください。
方法を教えていただいてどうもです。
確かにver4.04でも上のやり方で、「2147483648」を
返してくれました。
色々試して、使ってみたいと思います。

ありがとうございました。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Semrush [Bot] & ゲスト[11人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean