掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
オーバーフローを直すには? (ID:118639)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
非常に0に近い値による除算とかAtnの引数あたりが気になりますね。 Atnは、その性質上常に引数の0除算及びオーバーフローの可能性がありますから。 Atnの引数の分子と分母を直接渡す Atn2(x,y)という関数を作って、Atn(x/y) の代わりに使用してはどうでしょうか? Public Function PI() As Double PI = Atn(1#) * 4 End Function Public Function Atn2(ByVal x As Double, ByVal y As Double) As Double Dim atnArg As Double If y <> 0# Then On Error GoTo ErrorHandler atnArg = x / y Atn2 = Atn(atnArg) Exit Function End If 'y が0か除算でオーバーフローするほど小さい値である場合 yisVerySmall: Dim retVal As Double '返り値の絶対値はπ/2にする retVal = PI / 2# 'x と y の符号によって返り値の符号を決める If x > 0# Then If y < 0# Then retVal = -retVal End If ElseIf x < 0# Then If y >= 0# Then retVal = -retVal End If Else '計算不能なのでエラーにする Err.Raise 5 End If Atn2 = retVal Exit Function ErrorHandler: '除算でオーバーフロー→ y は非常に小さい値なので別の方法で計算する If Err.Number = 6 Then Resume yisVerySmall End If Err.Raise Err.Number End Function
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.