質問させていただきます。
エクセルの演算機能にてですが、
D4:-28.2
D5:-33 F5:4.8
D6:=D5-D4 F7:DEGREES(ACOS(D6/F5))
と入力したところF7に#NUM!とエラーが出てしまいます。
D5-D4=4.8となりF7には180と出る予定なのですが、出ません。
これが、D5:-33.4、F5:5.2と入力するとF7に180と出力されます。
同じ、小数点一桁同士の計算なのにどうして前者は結果が出ないのでしょうか?
一応、D6にROUNDを追加することで解決はしましたが、気になって仕方ありません。
わかる方いましたら、教えてください。
なお、使用しているのはwindows7です。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
>同じ、小数点一桁同士の計算なのにどうして前者は結果が出ないのでしょうか?
二進数では「0.1」は「循環小数」になります。
二進数の世界では、小数点以下は「1/2」「1/4」「1/8」「1/16」「1/32」「1/64」などを足し合わせた数で表現します。
なので「0.5」とか「0.25」とか「0.125」は「誤差無しで記憶できる」のですが「0.1」は、どうしても誤差が出てしまいます。
この誤差は「0.1と入力すると、内部的に0.1じゃない数が記録されるけど、画面には0.1と表示される」と言う事からも判るように「目で見ても判らない」のです。
D4:-28.2
D5:-33
では、引き算した結果は「見えない誤差を含む」のです。
一方、
D4:-28.2
D5:-33.4
では、引き算した結果は「見えない誤差を含む」のは同じですが、誤差の「向き」が違います。
この「誤差の向き」が、ACOSに成功するか失敗するかを決定しています。
空いているセルに
=(D6+F5)
と入力してみてください。括弧付きの式にしているのが肝要です。
正負が違うだけで、絶対値が同じ値を足せば、0になる筈ですが、0になりません。
D4:-28.2
D5:-33
F5:4.8
の場合、結果が
-8.9E-16
(-8.9×10の-16乗、を意味します。-0.00000000000000089です)
と表示されます。
これは「D6の値が、-4.8よりも、誤差分だけ小さい」と言う事を意味します。
負の数なので、言い換えれば「-4.8よりも、誤差分だけ、0から遠い」のです。
ほんのちょっとだけ「-4.9の方に寄っている」のです。
なので「D6/F5」の割り算をすると、割り算の結果は「ほんのちょっとだけ、-1からズレて、-1.1の方に寄っている」のです。
ACOSの引数は「-1~1」に限られ、この範囲を逸脱すると「#NUM!」になります。
割り算の結果が「ほんのちょっと1.1の方に寄っている」って事は「-1~1からハミ出している」って事です。
一方、
D4:-28.2
D5:-33.4
F5:5.2
の場合、
=(D6+F5)
の結果が
8.88E-16
になります。
これは「D6の値が、-4.8よりも、誤差分だけ大きい」と言う事を意味します。
負の数なので、言い換えれば「-4.8よりも、誤差分だけ、0に近い」のです。
ほんのちょっとだけ「-4.7の方に寄っている」のです。
なので「D6/F5」の割り算をすると、割り算の結果は「ほんのちょっとだけ、-1からズレて、-0.9の方に寄っている」のです。
この値は、ACOSの引数の条件「-1~1」に一致していますから、正常に表示されます。
>一応、D6にROUNDを追加することで解決はしましたが、気になって仕方ありません。
計算結果が小数点以下第1位までで良いなら、D6を
=VALUE(TEXT(D5-D4,"#.#"))
にして下さい。
小数点以下第5位までなら
=VALUE(TEXT(D5-D4,"#.#####"))
にします。
これは「一旦、文字列にして、文字列を数値に変換する」と言う意味です。
セルに「4.8」と値を打ち込むと、内部的に「4.8と言う文字列を受け取って、文字列を数値に変換する」と言う処理をして、数値を記録します。
上記の式も「文字列を数値に変換する」と言う事をするので「誤差が消えて、直接に値を入力したのと同じ結果」が得られます。
このようにすると、計算結果のセルと値入力したセルの誤差が消えて
=(D6+F5)
の結果が「0」と表示される筈です。
こう表示されれば「誤差無し」って事なので、ACOSも失敗しません。
とても分かりやすかったです!
なんとなくNUM!が出るということは、1~-1の値に入っていないんだろうとは考えてましたが
、、、
二進数の誤差の関係だったのですか、、、
非常にわかりやすく、解決案も出していただいて助かりました!
ありがとうございます。
No.1
- 回答日時:
浮動小数点の誤差ってやつです。
-4.8/4.8=-1と表示されていても内部的には -1.000000000000000000000000001
みたいな値になっています。
ACOS()のように値の範囲が-1~1 みたいな関数だと、-1より小さい為エラーになっちゃうんです。
Excel で浮動小数点演算の結果が正しくない場合がある
http://support.microsoft.com/kb/78113/ja
下記なんかが比較的簡単に説明されています。
小数計算で発生する「誤差」―― 単純な計算の答えが合わない理由
http://pc.nikkeibp.co.jp/pc21/special/gosa/eg1.s …
迅速な対応ありがとうございます。
リンク先も見ましたが非常にわかりやすかったです。
エクセルにて小数点以下の計算をし小数点の表示桁数を変えたところ上記のようになりました。
大変勉強になりました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
最近、いつ泣きましたか?
泣いてストレス発散! なんて言いますよね。 あなたは最近いつ、どんなシチュエーションで泣きましたか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
メモのコツを教えてください!
メモを取るのが苦手です。 急いでメモすると内容がごちゃごちゃになってしまったり、ひどいときには全く読めない時もあります。
-
【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
【お題】 ・買ったばかりの自転車を分解してひと言
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
エクセルでθを求めたい。
Excel(エクセル)
-
実験における誤差範囲の許容範囲の決め方ってどうやればいいんですか? また、一般的には具体的にどこ程度
大学・短大
-
エクセルの散布図のX軸に文字を表示したいのですが、どうしたらよいのでしょうか?
Excel(エクセル)
-
-
4
sinのマイナス1乗の計算方法を教えてください。
数学
-
5
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで10%引く場合の計算...
-
エクセルにてacosを使い#NUM!...
-
(e)を€に変換しない方法
-
エクセルでの100時間後の日時の...
-
エクセルの文字入力について
-
「芳」という字の旧漢字を出すには
-
ネ + 喜 =ネ喜 ってなん...
-
外字有無ってなんですか? また...
-
☆画面中に縦スクロールバー付き...
-
キーボードで四角1を打つには...
-
Excel上でどれが外字か調べたい
-
漢字について質問です。
-
次の漢字の旧字をどうやったら...
-
旧漢字
-
「角」と言う字の真ん中が突き...
-
浩→右上が「牛」
-
漢字の「原」の点のないものはP...
-
A4のPDFが1ページあって、それ...
-
漢字が出ません。
-
51以降の数字を囲い文字(〇)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで10%引く場合の計算...
-
エクセルでの100時間後の日時の...
-
エクセルにてacosを使い#NUM!...
-
(e)を€に変換しない方法
-
エクセルで「4/1」をそのまま表...
-
エクセルのセルに”0(ゼロ)”...
-
三四郎を使用しています。
-
入力した数字が0.0xと表示される
-
エクセルのセルの幅を自動的に...
-
excelで今日以降の日付のセル...
-
横文字を縦文字1文字にしたい
-
エクセルで文字を入力すると文...
-
エクセル(2010) ピボットテ...
-
エクセルIF関数で
-
エクセルでハイフン付の数値を...
-
Excel 数字入力で無関係の日付...
-
Excel2007のピボットデーブルに...
-
excelで会議室予定表を作成した...
-
ロト6の組み合わせ番号の一覧表
-
エクセル 入力日より起算して...
おすすめ情報