No.3ベストアンサー
- 回答日時:
やろうとしていることは
lim_(x→0) f(x) = 1
で、 xを0に近付けつつ、f(x) を計算する、という感じなのでしょうか。
方法は3つあります。
(1) 計算式を工夫する。
0.999... だと 10^-15程度までしか正しくありませんが
0.000 .... 1 → 1.0 * 10^-n だと、10^-nの桁から15桁程度までの精度があります。
式を工夫して、計算結果が1ではなく、0に向うようにすることで、精度よく計算できるかもしれません
例)
g(x)=1-f(x) を求める。 ※「桁落ち」に注意
(2)十分な精度のある型を使う
https://ja.wikipedia.org/wiki/%E4%BB%BB%E6%84%8F …
自作するか、既存のものを使う
(3)計算自体に意味があるのか、考えてみる。
No.2
- 回答日時:
https://ja.wikipedia.org/wiki/IEEE_754
C#というか、.NET Frameworkで使われてるのは、IEEE754形式の浮動小数点数です。
二進数で表現されています。
10進数でキリがいいように見えても、二進数小数にすると無限小数になる、というのがよくあります。
それを有限の桁におさめるため、誤差が発生します。
精度が15桁というのも、2進数での丸めが発生する桁を10進数に換算した場合のものです。
それ以上の桁がまったく無い、というわけではありません。
実際、1に最も近い値は
0.99999 99999 99999 88897 76975 37484 34595 76368 33190 91796 875
になります。これは、正確な値で誤差はありません。
これと、1.0の間の値、というのは存在しません。間の値は、1.0か上記値かに丸められます。
a=0.99999 99999 99999 94
としても、
a = 0.99999 99999 99999 88897 76975 37484 34595 76368 33190 91796 875
なってしまいます。
> また、1.0に近似してほしくないときはどうしたらいいですか
その目的は何でしょうか?
上記のように、 aを決めて
1.0 != a
だとしても、それを計算の中で使うと
x * 1.0 == x * a (つまり、1.0 == a に相当)
となってしまうことも考えられます
どんな目的でそうしたいか、によって、対策も違います。
C#というか、.NET Frameworkで使われてるのは、IEEE754形式の浮動小数点数です。
二進数で表現されています。
10進数でキリがいいように見えても、二進数小数にすると無限小数になる、というのがよくあります。
それを有限の桁におさめるため、誤差が発生します。
精度が15桁というのも、2進数での丸めが発生する桁を10進数に換算した場合のものです。
それ以上の桁がまったく無い、というわけではありません。
実際、1に最も近い値は
0.99999 99999 99999 88897 76975 37484 34595 76368 33190 91796 875
になります。これは、正確な値で誤差はありません。
これと、1.0の間の値、というのは存在しません。間の値は、1.0か上記値かに丸められます。
a=0.99999 99999 99999 94
としても、
a = 0.99999 99999 99999 88897 76975 37484 34595 76368 33190 91796 875
なってしまいます。
> また、1.0に近似してほしくないときはどうしたらいいですか
その目的は何でしょうか?
上記のように、 aを決めて
1.0 != a
だとしても、それを計算の中で使うと
x * 1.0 == x * a (つまり、1.0 == a に相当)
となってしまうことも考えられます
どんな目的でそうしたいか、によって、対策も違います。
この回答へのお礼
お礼日時:2017/09/06 22:37
ある値を限りなくゼロに近づけるようにループ処理で計算をしているのですが10^(-20)くらいの桁まで計算させたいんです...友達や先輩に聞いても解決できなかったので...
No.1
- 回答日時:
処理系によります。
例えば、Visual C++だと15桁。
データ型の範囲
https://msdn.microsoft.com/ja-jp/library/s3f49kt …
> この数値が1.0として扱われるのは小数第何位からですか?
なので、16位とかって事になるのでは。
> また、1.0に近似してほしくないときはどうしたらいいですか?
有効桁数内で処理して下さい。
#define NUM99 0.999999999999999
とかとでもしとくとか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル関数のスペシャリストの方、教えてください。 写真のように A列にはデータ C列にはデータの中 7 2022/04/09 00:15
- 数学 高校数学について 関数y=-x^2+2x+c (xは0以上3以下)の最小値が-5であるときの定数cの 1 2022/10/01 09:52
- 数学 数学の問題の解き方を教えてください! 3 2022/11/02 17:32
- C言語・C++・C# C#の問題で2つの整数a,bの最大公約数(GCD)を求めるユークリッドの互除法は,aをbで割った余り 2 2022/06/26 16:52
- C言語・C++・C# C言語について コマンドラインで >変数 12.00 (char型) と、小数点付きの値を共用体に渡 1 2022/04/22 16:56
- 数学 高3の微分についての質問です。 ある説明に「数学IIで扱ったのは多項式関数で、この時極限値は必ず存在 6 2023/07/02 10:04
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語 1から20までの逆数の和を求めたいのですが、このようにプログラミングしたら値が負になってしま 3 2023/05/22 18:31
- HTML・CSS HTMLの・要素・属性・属性値 はプログラム言語の「変数」みたいに変更できますか? 5 2022/10/04 05:27
- C言語・C++・C# C言語 入力した値から0までの数を並べて表示するプログラミングを作りたいんですけど、自分でやってみた 2 2023/05/22 18:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
O(n log n)について2
-
16進数 加算 減算 C言語
-
除算を使わずに10で割りたい。
-
ExcelでPC(パソコン)によって...
-
ExcelのINT関数の計算結果がお...
-
float.h のテスト結果がおかしい
-
どんな数字を入力してもaverage...
-
逆ポーランド記法
-
floatの有効桁数
-
時刻の比較
-
パソコンで階乗を計算
-
変換指定子%22-16gの表示...
-
10進数での「25」が2進数では「...
-
H8/3664FのA/D変換について
-
【C++】double の計算結果がお...
-
色の判定
-
”/”を使わずに割り算したいんで...
-
乱数について
-
2の補数について
-
255の2の補数、B'00000001'が-...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
三角比の俯角の計算
-
c languageで 簡単な質問があ...
-
16進数 加算 減算 C言語
-
ExcelでPC(パソコン)によって...
-
VB.net Double と...
-
”/”を使わずに割り算したいんで...
-
ExcelのINT関数の計算結果がお...
-
有効数字について 以前質問をし...
-
floatの有効桁数
-
三菱シーケンサ(Aシリーズ)で...
-
距離から緯度経度を求める方法
-
VBAでミリ秒まで出力する方法
-
EXCELの関数"STDEV(標準偏差)"...
-
除算を使わずに10で割りたい。
-
C言語プログラミングにて、arct...
-
VB6.0での小数点の扱いについて
-
VBAでの割り算の余りの求め方
-
255の2の補数、B'00000001'が-...
-
変換指定子%22-16gの表示...
おすすめ情報