다음 작업을 수행하기 위해 C로 프로그램을 작성하려고합니다.C에서 float 범위를 반복 함
입력 : 세 개의 배정 밀도 a, b 및 c.
출력 : b에서 a까지의 모든 숫자는 c의 감소에 도달 할 수 있습니다.
다음은 간단한 프로그램입니다 (파일명 : range.c).
#include <stdlib.h>
#include <stdio.h>
int main()
{
double high, low, step, var;
printf("Enter the <lower limit> <upperlimit> <step>\n>>");
scanf("%lf %lf %lf", &low, &high, &step);
printf("Number in the requested range\n");
for (var = high; var >= low; var -= step)
printf("%g\n", var);
return 0;
}
그러나 for 루프 오히려 이상하게 어떤 입력에 대한 동작. 예를 들면 다음과 같습니다.
10-236-49-81:stackoverflow pavithran$ ./range.o
Enter the <lower limit> <upperlimit> <step>
>>0.1 0.9 0.2
Number in the requested range
0.9
0.7
0.5
0.3
10-236-49-81:stackoverflow pavithran$
왜 루프가 var = 0.1에서 종료되는지 알 수 없습니다. 다른 입력에 대해서는 예상대로 작동합니다.
10-236-49-81:stackoverflow pavithran$ ./range.o
Enter the <lower limit> <upperlimit> <step>
>>0.1 0.5 0.1
Number in the requested range
0.5
0.4
0.3
0.2
0.1
10-236-49-81:stackoverflow pavithran$
첫 번째 상황에서 이상한 동작이 숫자 정밀도와 관련이 있습니까?
범위에 항상 바닥 ((높음 - 낮음)/단계) +1 숫자가 포함되도록하려면 어떻게해야합니까?
나는 루프 변수를 정수로 스케일하고, 스케일링으로 나눈 루프 변수의 결과를 출력하는 플로트 오버 루핑 방법을 시도했다. 그러나 아마도 더 나은 방법이있을 것입니다 ...
가능한 복제 [소수점 연산이 깨진 떠?] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – LPs
나는 문제가 설명이 필요하다고 생각. 감소가 이중 산술 또는 실수 산술로되어 있습니까? –