programing

파이썬에서 float('inf')의 요점은 무엇입니까?

yellowcard 2023. 8. 8. 21:26
반응형

파이썬에서 float('inf')의 요점은 무엇입니까?

여기서 궁금한 것은 변수가 프로그램에 무한한 값을 저장하는 이유가 무엇입니까?실제 용도가 있으며, 사용하는 것이 더 바람직한 경우가 있습니까?foo = float('inf')아니면 그냥 삽입하기 위해 끼워 넣은 작은 조각인가요?

이 값은 비교를 위한 제한되지 않은 상한 값으로 작용합니다.이것은 어떤 것의 가장 낮은 값을 찾는 데 유용합니다.예를 들어, 트리를 횡단할 때 경로 경로 비용을 계산합니다.

예: 옵션 목록에서 "가장 저렴한" 경로 찾기:

>>> lowest_path_cost = float('inf')
>>> # pretend that these were calculated using some worthwhile algorithm
>>> path_costs = [1, 100, 2000000000000, 50]
>>> for path in path_costs:
...   if path < lowest_path_cost:
...     lowest_path_cost = path
...
>>> lowest_path_cost
1

만약 당신이float('Inf')사용 가능, 어떤 값을 사용하시겠습니까?the initial lowest_path_cost그럴 것9999999충분합니다 --float('Inf')이 추측을 제거합니다.

설명서에서 다음을 참조하십시오.

많은 부동 소수점 피쳐가 추가되었습니다.float() 함수는 이제 문자열 nan을 IEEE 754 Not A Number 값으로, +inf 및 -inf를 양 또는 음의 무한대로 변환합니다.이것은 IEEE 754 의미론이 있는 모든 플랫폼에서 작동합니다. (Christian Heimes 기여, 1635호)

이 항목도 참조하십시오.Infinity 및 NaN 관련 작업

float('inf')

위 답변에서 언급한 바와 같이,float('inf')값이 무한히 큰 변수를 설정하는 데 사용됩니다.간단히 말하면 +ve infinite로 설정됩니다.

또는 다음과 같은 문구를 사용할 수 있습니다.

import sys
least_value = sys.maxsize

sys.max 크기는 초기에 큰 값을 설정하는 데 더 일반적으로 사용됩니다.우리의 목표가 주어진 값 집합에서 최소 값을 찾는 것일 때.

또한 주어진 값 집합에서 가장 큰 값을 찾고자 하는 경우.우리는 다음을 사용할 수 있습니다.

import sys
greatest_value = -sys.maxsize - 1

# logic for comparing with rest of values

-sys.maxsize - 1초기 값을 -ve 무한대로 설정하는 데 사용됩니다.

float('inf')비교에 사용할 수 있으므로 코드를 더 단순하고 명확하게 만들 수 있습니다.예를 들어 병합 정렬에서 afloat('inf')하위 배열의 끝에 Sentinel 값으로 추가할 수 있습니다.수학에서 무한대를 사용하는 것과 혼동하지 마십시오. 결국 프로그래밍은 수학의 전부가 아닙니다.

0을 사용하는 대신 음수가 있을 경우 음수를 처리해야 하는 경우 float("+inf")와 float("-inf")를 사용하면 다음과 같이 양수 또는 음수 무한대를 비교할 수 있습니다.

사전에서 가장 큰 값 찾기:

def max_key(my_dict):
    largest_key = float("-inf")
    largest_value = float("-inf")

    for key, value in my_dict.items():
      if value > largest_value:
          largest_value = value
          largest_key = key
    return largest_key


print(max_key({1:100, 2:1, 3:4, 4:10}))      # should print 1

print(max_key({"a":100, "b":10, "c":1000}))  # should print "c"

수학적 연산을 수행하는 동안 ①은 매우 중요한 개념입니다.

float("inf")또는float("INF")또는float("Inf")또는float("inF")또는float("infinity")를 생성합니다.float무한대를 유지하는 객체

float("-inf")또는float("-INF")또는float("-Inf")또는float("-infinity")음수 무한대를 유지하는 부동 객체를 만듭니다.

float("NAN")또는float("nan")또는float("Nan")float절대 다수를 차지하지 않는

무한대 사용:

import math

_pos_infinity = float("INF")#Positive infinity
_neg_infinity = float("-INF")#Negative infinity
_nan = float("NAN")#Not a number

print(_pos_infinity, _neg_infinity, _nan)#inf -inf nan


"""
SincePython 3.5 you can use math.inf
Use math.isinf and math.isnan method to identify number
"""

print(math.isinf(_pos_infinity))#True
print(math.isnan(_pos_infinity))#False
print(math.isnan(_nan))#True

"""
Arithmetic operation
"""

print(_pos_infinity / _pos_infinity)#nan
print(_pos_infinity + 1)#inf
print(_neg_infinity + 1)#-inf
print(_neg_infinity - _neg_infinity)#nan, Since +infinity -infinity is indeterminate and undefined. Don't overthink infinity is a concept.
print(1 / _pos_infinity)#0.0 since 1/∞ is 0
print(1 / _neg_infinity)#-0.0
print(_pos_infinity * _neg_infinity)#-inf , A positive times a negative is a negative.
print(_neg_infinity * _neg_infinity)#inf, A negative times a negative is positive


try:
    val = 1/(1/_pos_infinity) # 1/∞ is 0 & 1/0 will raise ZeroDivisionError
    print("This line is not executed")
except ZeroDivisionError as err:
    print(err)

출력:

$ python3 floating.py 
inf -inf nan
True
False
True
nan
inf
-inf
nan
0.0
-0.0
-inf
inf
float division by zero

설정할 수 있습니다.-infinity최소 값 및+infinitya의 최대 가치로서QDoubleSpinBox

box = QDoubleSpinBox()
box.setMinimum(float("-inf"))
box.setMaximum(float("inf"))

출처:

import sys

from PySide6.QtWidgets import QMainWindow, QApplication, QDoubleSpinBox, QWidget, QFormLayout, QLineEdit, QPushButton


def getDoubleSpinBox() -> QDoubleSpinBox:
    box = QDoubleSpinBox()
    box.setMinimum(float("-inf"))
    box.setMaximum(float("inf"))
    box.setSingleStep(0.05)
    box.setValue(100)
    return box


def getLineEdit(placehoder: str, password: bool = False):
    lineEdit = QLineEdit()
    lineEdit.setPlaceholderText(placehoder)
    if password:
        lineEdit.setEchoMode(QLineEdit.Password)
    return lineEdit


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("Open Bank")
        self.widget = QWidget()
        self.widgetLayout = QFormLayout()
        self.widgetLayout.addRow("ID", getLineEdit(placehoder="Investor name"))
        self.widgetLayout.addRow("Investment", getDoubleSpinBox())
        self.widgetLayout.addRow("Password", getLineEdit(placehoder="Enter secret password", password=True))
        self.widgetLayout.addRow(QPushButton("Invest"), QPushButton("Cancel"))
        self.widget.setLayout(self.widgetLayout)
        self.setCentralWidget(self.widget)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec())

창:

Open Bank

언급URL : https://stackoverflow.com/questions/34264710/what-is-the-point-of-floatinf-in-python

반응형