FLT_MIN이 0인 이유는 무엇입니까?
limits.h
floating이 아닌 점 산술 유형에 대한 한계를 지정합니다.INT_MIN
그리고.INT_MAX
. 이 값들은 int를 사용하여 나타낼 수 있는 가장 음의 값이자 가장 양의 값입니다.
인float.h
, 에 대한 정의가 있습니다.FLT_MIN
그리고.FLT_MAX
. 다음을 수행하는 경우:
NSLog(@"%f %f", FLT_MIN, FLT_MAX);
다음과 같은 출력을 얻을 수 있습니다.
FLT_MIN = 0.000000, FLT_MAX = 340282346638528859811704183484516925440.000000
FLT_MAX
당신이 예상하는 것처럼, 정말 큰 숫자와 같지만, 왜?FLT_MIN
정말 큰 음수 대신에 0과 같습니까?
실제로는 0은 아니지만, 를 사용하여 검사하면 0처럼 보일 수 있습니다.printf
아니면NSLog
을 이용하여%f
.
에 따르면float.h
(적어도 Mac OS X 10.6.2에서는)FLT_MIN
다음과 같이 설명됩니다.
/* Minimum normalized positive floating-point number, b**(emin - 1). */
그 문장의 긍정적인 것을 주목하세요.FLT_MIN
0보다 큰 최소(정규화된) 숫자를 말합니다. (정규화되지 않은 숫자는 훨씬 더 작습니다.)
최소 부동 소수점 숫자(음의 숫자 포함)를 원하는 경우-FLT_MAX
.
'%f' 형식은 고정 형식으로 소수점 6자리를 인쇄합니다.FLT_MIN이 훨씬 작기 때문에 고정점에서는 0으로 보입니다.'%e' 또는 '%g' 형식을 사용하면 더 나은 형식의 답변을 얻을 수 있습니다.FLT_MAX와 유사합니다.
#include <float.h>
#include <stdio.h>
int main(void)
{
printf("MIN = %f, MAX = %f\n", FLT_MIN, FLT_MAX);
printf("MIN = %e, MAX = %e\n", FLT_MIN, FLT_MAX);
return(0);
}
MIN = 0.000000, MAX = 340282346638528859811704183484516925440.000000
MIN = 1.175494e-38, MAX = 3.402823e+38
표준 헤더 파일 float.h에서 FLT_MIN 값을 인쇄하려고 할 때마다 0.00000000(출력 화면에서 볼 수 있듯이)을 얻을 수 있습니다.그것은 사실 실수가 아닙니다.형식 지정자 %f 때문에 이 결과가 나타납니다.일반적으로 %f는 소수점 뒤에 6자리를 인쇄하지만 이 경우 부호가 음인 값이 너무 작아서 소수점 뒤에 상당한 양의 숫자를 인쇄해야 합니다.
%.54f(기계 종속)를 사용하여 원하는 결과를 얻었습니다(시스템의 경우 0.000000000000000000000011754943508222875).
//시스템에서 이를 확인합니다.
#include<stdio.h>
#include<float.h>
int main()
{
printf("Minimum signed float %.55f\n",FLT_MIN);
printf("Minimum signed float %e\n",FLT_MIN);
return 0;
}
//출력 :-
// 최소 부호 플로트 0.0000000000000000000000117549435082228750
// 최소 서명 플로트 1.175494e-038
당신이 CHAR_MIN에 대해 0.00000000을 받는 이유와 동일한 포맷의 지정자로 정확한 결과를 얻는 방법은 이제 명확하다고 생각합니다.%e을(를) 사용하면 더 나은 형식의 결과를 얻을 수 있습니다.
왜가.
FLT_MIN
0과 같습니까?
이것은 0과 같지 않습니다.로 표시됩니다.0.000000
사용으로 인하여"%f"
소수점 자리 뒤에 6개의 소수점 자리를 인쇄합니다..
.
FLT_MIN
종종 약 1.17549435e-38의 값을 갖습니다.
언급
그 이유에 대해서는 이 질문이 답이 되었지만, 저는 정확한 값을 게시하려고 생각했습니다.FLT_TRUE_MIN, FLT_MIN, FLT_MAX
그들의 가장 가까운 곳 뿐만 아니라.float
이웃들이웃 :float
2진법 32 입니다.
// Approximate value, exact value
Before, FLT_TRUE_MIN, after
0.00000000e+00 0.0
1.40129846e-45 0.00000000000000000000000000000000000000000000140129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125
2.80259693e-45 0.0000000000000000000000000000000000000000000028025969286496341418474591665798322625605238837530315435141365677795821653717212029732763767242431640625
Before, FLT_MIN, after
1.17549421e-38 0.00000000000000000000000000000000000001175494210692441075487029444849287348827052428745893333857174530571588870475618904265502351336181163787841796875
1.17549435e-38 0.000000000000000000000000000000000000011754943508222875079687365372222456778186655567720875215087517062784172594547271728515625
1.17549449e-38 0.00000000000000000000000000000000000001175494490952133940450443629595204006810278684798281709160328881985245648433835441437622648663818836212158203125
Before, FLT_MAX, after
3.40282326e+38 340282326356119256160033759537265639424.0
3.40282347e+38 340282346638528859811704183484516925440.0
inf inf
언급URL : https://stackoverflow.com/questions/2528039/why-is-flt-min-equal-to-zero
'programing' 카테고리의 다른 글
jquery를 사용하여 텍스트 상자를 비활성화하시겠습니까? (0) | 2023.11.01 |
---|---|
Mysql2:: 오류:소켓 '/tmp/mysql'을(를) 통해 로컬 MySQL 서버에 연결할 수 없습니다.양말' (0) | 2023.11.01 |
PHP PDO 대 normal mysql_connect (0) | 2023.11.01 |
check_admin_referer()가 포함된 Wordpress 함수를 PHP unit에서 어떻게 테스트하시겠습니까? (0) | 2023.11.01 |
Get Value of Radio 버튼 그룹 (0) | 2023.10.27 |