No.7ベストアンサー
- 回答日時:
>$point1 = "500.404";
>$point2 = "500.554";
>$point3 = "1000";
>$point = $point1+$point2-$point3;
>print $point;
>で表示内容が
>0.95799999999997
変数が実数であれば至極当然の結果です(Excelでの計算でもほぼ同様の結果になります)
通常は、これを表示のみ、表示したい桁の1桁下で四捨五入して表示するよう設定します
これはExcelではfaqです(と言うか実数を扱うコンピュータ技術者では常識です)
実数をどのような形式で保存し、計算・表示するかを学んでください
No.8
- 回答日時:
まず、計算は間違っていません。
内部ではこういう結果がでています。#6の方の回答も0.958と表示されていますが、内部では、0.9579999...となっているのを小数点第四位を四捨五入して表示しているにすぎません。このあたりは、結果表示の考え方にもよります。
残念ながら、浮動小数点の演算というのはこういうものです。
浮動小数点というのが、単精度だと32ビットで表現できる範囲以上の数値を扱うためには仕方のないことです。
たとえば、1000000000.に0.1を加える場合、単精度だと桁落ちするので、何回加算しても答えは1000000000.のままです。
数値演算を手がける場合、このあたりを理解して誤差が出にくいような計算順序やデータ型を検討してください。
簡単な方法はやられたように固定小数点の範囲で演算できるようにすることですが、COBOLのように固定小数点で多桁の10進演算の出来るようなパッケージを使うこともよい方法です。
No.6
- 回答日時:
補足にあった式をそのままコピペしましたが・・・・
ちゃんと0.958って表示されました
PHPのバージョンによって処理が変わるかもしれませんね。
ご使用のPHPのバージョンはいくつでしょうか?
この回答への補足
http://www.tsukaeru.net/vps.phpを利用しており、
バージョンについては、以下と表示されています。
バージョン 4.3.2
No.5
- 回答日時:
詳細が不明なのはすでに指摘されているとおりですが,
この手の誤差の例としてよく出る例としては近い数の引き算というのがあります.
今回の場合, (変数1 + 変数2) の値と変数3の値がかなり近い場合に, 有効桁数が
一気に小さくなってしまう場合があります.
特に後に別の式で値を使う時には困ることもあるかもしれません.
この回答への補足
1以下以外の場合は正しく表示しますが、
1以下の場合、最終の数字が1小さくその後ろが9が続いています。
質問者が使う桁数で小数点以下は最大4桁で最小0桁
0.5543になったり
1になったり
0.05になったりします。
すみません。
すべて整数で保存し、
表示の際に、$point = $point/10000;
をすることにしました。
これでプログラム組みますが誤った数字が出るかもしれませんので
一番いい方法があれば、教えてください(小数点以下は、4桁です)
よろしくおねがいします。
今回は、迷惑をおかけしすみませんでした。
No.4
- 回答日時:
最低限、変数の型が必要です。
加減算でわかるような誤差が出るとすると、原因はこの式以前だと思いますね。
なお、基本的には計算結果は全て切り捨てられ、浮動小数点は元々が近似値なで、誤差は当然あるということを理解しておいてくださいね。
この回答への補足
$point1 = "500.404";
$point2 = "500.554";
$point3 = "1000";
$point = $point1+$point2-$point3;
print $point;
で表示内容が
0.95799999999997
です。
数学関数がいまいちわかりませんので
おかしい所などがありましたら指摘を
お願いします。
No.1の人への補足にミスした個所がありました。
1000を100にしてしまいました。
すみません。
すべて整数で保存し、
表示の際に、$point = $point/10000;
をすることにしました。
これでプログラム組みますが誤った数字が出るかもしれませんので
一番いい方法があれば、教えてください(小数点以下は、4桁です)
よろしくおねがいします。
今回は、迷惑をおかけしすみませんでした。
No.3
- 回答日時:
No.1の人、厳しい一言ですが、ごもっともです。
質問者は、学生さんかな。
数値計算シミュレーションにおいて、計算誤差は稀に生じます。
大事なことは、その誤差が求めたい解の「有効桁数」よりも小さいかどうかを判断しなければいけません。
がんばってください。
すみません。
すべて整数で保存し、
表示の際に、$point = $point/10000;
をすることにしました。
これでプログラム組みますが誤った数字が出るかもしれませんので
一番いい方法があれば、教えてください(小数点以下は、4桁です)
よろしくおねがいします。
今回は、迷惑をおかけしすみませんでした。
No.2
- 回答日時:
例をあげてもらえれば詳細もわかるかもしれません。
そもそもが変数の値に誤差があるんじゃないですか?
すみません。
すべて整数で保存し、
表示の際に、$point = $point/10000;
をすることにしました。
これでプログラム組みますが誤った数字が出るかもしれませんので
一番いい方法があれば、教えてください(小数点以下は、4桁です)
よろしくおねがいします。
今回は、迷惑をおかけしすみませんでした。
No.1
- 回答日時:
質問の意味がわかりません、何を聞きたいのか具体的に示してください
各変数それぞれの値と答、質問者が要求する誤差の許容値等が明確でないと回答できません
また 言語は? 変数は整数・実数・複素数 また精度(ビット数、表記方法)は?
実数・複素数の場合必ず誤差が発生します
質問者は判っていることでも、回答する者(読んだ者)には、書かれていること以外は全く判りません
他人に理解できるような質問ができないのは、SE・プログラマーにとっては致命的です
この回答への補足
>言語は?
PHPのカテゴリにあるため、回答者にわかるとおもっていましたが
そうではないみたいなのでスクリプト言語のPHPの質問です。
>変数は整数・実数・複素数
小数点以下が含まれている時があるため、
実数だと思います。
>精度(ビット数、表記方法)
精度については、わかりません。
$point1 = "500.404";
$point2 = "500.554";
$point3 = "100";
$point = $point1+$point2-$point3;
の形式でしています。
すみません。
すべて整数で保存し、
表示の際に、$point= $point/10000;
をすることにしました。
これでプログラム組みますが誤った数字が出るかもしれませんので
一番いい方法があれば、教えてください(小数点以下は、4桁です)
よろしくおねがいします。
今回は、迷惑をおかけしすみませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 誤差の伝播の計算 3 2022/04/11 22:40
- 統計学 加重最小二乗法=①「変数を自然対数変換」=②「誤差項の分散の逆数を重み付け」? 8 2022/11/26 11:15
- 統計学 なんで確率変数1.00の時が標準誤差0.5mmなんですか? 分布関数値が68%前後のとこが標準偏差じ 2 2023/04/26 11:57
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- 数学 多変数関数の微分とテイラー展開について 5 2022/04/24 16:55
- Excel(エクセル) Excel関数 セルが空白の場合は,現在の表示のままに、数値が入れば計算する数式を教えてください。 4 2023/08/25 17:40
- 数学 数列、等比数列、等差×等比の和の問題です。 写真(部の計算がわかりません。 式変形をどのように行って 2 2023/06/27 21:46
- 数学 以下の数学の問題を教えてください。 確率変数Xは標準正規分布N(0、1)に確率変数Yは平均3のポアソ 3 2022/12/02 19:13
- 数学 1変数関数に陰関数ってあるんですか? 1変数関数は f(x)=xの式 f(x)はxの値で決まるもの( 4 2023/05/08 18:47
- 物理学 移流熱拡散方程式の解き方 フーリエ変換 1 2022/08/15 15:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
有効数字について 以前質問をし...
-
VB.net Double と...
-
初心者です。 C++ついて
-
”/”を使わずに割り算したいんで...
-
VB6.0での小数点の扱いについて
-
10次の多項式を求めるプログラ...
-
コンピューターは指数関数をど...
-
float.h のテスト結果がおかしい
-
c言語 立方根
-
16進数 加算 減算 C言語
-
z80について
-
ExcelのINT関数の計算結果がお...
-
三角比の俯角の計算
-
c languageで 簡単な質問があ...
-
Log関数に関する質問
-
floatの有効桁数
-
Pythonについてなのですが、小...
-
ExcelでPC(パソコン)によって...
-
pythonの乗算の表示結果の差に...
-
BCD・HEX・BINについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
ExcelでPC(パソコン)によって...
-
ExcelのINT関数の計算結果がお...
-
16進数 加算 減算 C言語
-
VB.net Double と...
-
floatの有効桁数
-
三菱シーケンサ(Aシリーズ)で...
-
c languageで 簡単な質問があ...
-
除算を使わずに10で割りたい。
-
VBAでミリ秒まで出力する方法
-
VBAでの割り算の余りの求め方
-
VB6.0での小数点の扱いについて
-
VB6のFIX関数での誤差について
-
有効数字について 以前質問をし...
-
100桁の計算ができなくて困って...
-
浮動小数演算は実行環境の変化...
-
EXCELの関数"STDEV(標準偏差)"...
-
BCD・HEX・BINについて
-
コンピューターは指数関数をど...
-
乱数 なぜ剰余を使うのか
おすすめ情報