ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 15:33

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




新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2006年10月14日(土) 07:41 
Active Basic 5 CP3 の、
include/basic/function.abpにおいてこのような関数がありましたが、
コード:
Function IsNaN(ByVal x As Double) As BOOL
    Dim p As *DWord
    p = VarPtr(x) As *DWord
    If (p[1] And &H7FF00000) = &H7FF00000 Then
        If (p[0] <> 0) Or ((p[1] And &HFFFFF) <> 0) Then
            IsNaN = TRUE
        End If
  End If
  IsNaN=FALSE
End Function
これだと、いかなる条件でもFALSEしか返らないような気がします。[/code]


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年10月14日(土) 13:18 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
いえ,これで良いのです。

このIsNaNは,最初のIfで指数部を調べ,次のIfで仮数部を調べています。
NaNは「符号部:不定,指数部:全ビット1,仮数部:少なくともどこか1ビット立っている」ということになっています。
Double型は,符号部:1ビット,指数部:11ビット,仮数部:53ビットあり,
しかもx86/x64ではリトルエンディアンであることを考慮するとそのようになるのです。

参考:IA-32 インテル(R) アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル 上巻: 基本アーキテクチャー 4.2.2 表4.3


通報する
ページトップ
 記事の件名: そこではなくて
投稿記事Posted: 2006年10月14日(土) 17:57 
説明ありがとうございます。
しかし、自分が言っているのは、

If (p[1] And &H7FF00000) = &H7FF00000 Then
If (p[0] <> 0) Or ((p[1] And &HFFFFF) <> 0) Then
IsNaN = TRUE
End If
End If

ここで、せっかく IsNaN = TRUE となっても、
そこが終わった後

IsNaN=FALSE

代入してしまっているのではないか、ということです。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年10月14日(土) 19:10 
オフライン

登録日時: 2005年5月31日(火) 07:49
記事: 162
その点には気がついたので結構前に修正いたしました。

次のリリースで修正版が配布されるとおもいますので、しばらくお待ちください。

または Include\basic\function.sbp を次の最新版と差し替えてもらっても構いません。
http://cvs.sourceforge.jp/cgi-bin/viewc ... nction.sbp


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


通報する
ページトップ
投稿記事Posted: 2006年10月15日(日) 00:21 
ありがとうございました


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

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


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[16人]


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

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