2016-09-28 10 views
1

私のプログラムでは、私がpythonが私に与えることができる最も小さな数字を探しています。私が数を2で割ったとき、私は5 x 10^-324(5e-324)を得ました。私はこれをPythonで使うことができる最大の数で割ることができると思った。私はこれを行うことにより、Pythonで最大の数を取得しようとしました:最小番号を見つけようとしています

z = 1 
    while True: 
     try: 
      z = z+1 
     except OverflowError: 
      z = z-1 
      break 

ここに私の完全なコードです:

from os import system 
x = 76556758478567587 
while True: 
    x = x/2 
    if x/2 == 0.0: 
     break 

print("Smallest number I can compute:", x) 
print() 
z = 1 
while True: 
    try: 
     z = z+1 
    except OverflowError: 
     z = z-1 
     break 

print(str(x) + " divided by " + str(z) + " is...") 
z = x/z 
print(z) 
system("pause >nul") 

私はこれを実行するたびに、それは何もしません。私は突然それがまだ問題を解決しようとしていることを認識しているので、タスクマネージャーを開き、Pythonは死んだ牛を食べるオオカミのように私のCPUを食べていました。


私はPythonでの最小数は負のだろう知っているが、私はゼロ上記の最小数を取得したいです。

+0

最初に最大の整数を見つけ、次に逆数を取る; –

+0

最初のアルゴリズムはlog(N)-complexで、2番目のアルゴリズムはN-complexです。オーバーフローに達するまで2を掛ける必要があります。しかし私は運動が無意味であると感じています。 –

+0

何ですか? Pythonには最大数または最小数はありません。 Pythonは自動的に "int"を実際に無限のサイズの "long"に変換します(現実的にはOSによって割り当てられます)。 max 'int'がありますが、それはかなり無意味です。それが満足できるものではない場合は、https://en.wikipedia.org/wiki/Arbitrary-precision_arithmeticを調べるか、参考文献として「big number library」を検索してください。 –

答えて

3

のようにして、最大/最小表現有限のフロートを取得するsys.float_infoを使用することができる:

>>> import sys 
>>> sys.float_info.min 
2.2250738585072014e-308 
>>> sys.float_info.max 
1.7976931348623157e+308 

Pythonは308電源10に-308、約10からの値を保持することができ、倍精度浮動小数点数を使用し。あなたもdenormals経由1e-308よりも数字が小さいかも知れませんが、そこにこれまで大幅なパフォーマンスヒットがあると、このような数字は精密の損失でを表現している

# for maximum 
>>> 1e308 
1e+308 
>>> 1e+309 
inf <-- Infinite 

:以下はPythonのプロンプトから実験があります。私は、Pythonが1e-323を処理できることを発見しましたが、1e-324でアンダーフローし、値として0.0を返します。

# for minimum 
>>> 1e-323 
1e-323 
>>> 1e-324 
0.0 

あなたは5e-324として来るsys.float_info.min * sys.float_info.epsilon、として非正規化最小を得ることができます。

文書あたりとおり

sys.float_info.max最大表現有限フロート

sys.float_info.min

最小の正の正規化浮動小数点数であります詳細情報を確認してください:sys.float_info

sys.float_infoは、float型に関する情報を保持する構造体シーケンスです。これには、精度と内部表現に関する低レベルの情報が含まれています。値は、 'C'プログラミング言語の標準ヘッダファイルfloat.hで定義されているさまざまな浮動小数点定数に対応しています。詳細は、1999年のISO/IEC C標準[C99]の5.2.4.2.2の「浮動型の特性」を参照してください。

+0

興味深いのは、あなたがまだ 'sys.float_info.min'を分けるように見えるということです。そして、私は確信していません_why_。多分IEEEの教祖が私たちを啓発することができますか? – mgilson

+0

OPが5e-324になったときに、2.2250738585072014e-308が使用可能な最小のフロートであるとはどのように仮定しますか? – TigerhawkT3

+0

試してみてください: 'sys.float_info.min * sys.float_info.epsilon' – brianpck

0

明らかに欠けているキーワードは「epsilon」です。「あなたはPythonのイプシロン値で検索した場合、それをGoogleで結果の上部にStackOverflow: Value for epsilon in Pythonへのリンクを返します。

あなたはこの用語はこの概念に関連付けられているどのように理解すれば明らかにそれが役立ちます。

1

Pythonで最小の浮動小数点数の表現は5e-324、または2.0**-1075である。

、他の2つの答えが、それぞれあなたがこの番号を見つけるために必要なものの半分を与えている。これは、sys.float_info.min2.2250738585072014e-308、最小の正規化されたフロート)を乗じることにより求めることができます作成者:sys.float_info.epsilon2.220446049250313e-16、最小の割合では、まだ別の値を取得しながら番号を変更できます)。

関連する問題