정확히 하나의 부동 소수점 수에서 다음 수로 루프하려고합니다. 말하자면, 정확히 표현할 수있는 IEEE754 번호 인 std::numeric_limits<float>::epsilon()
에서 1
으로 루프를 만들어야합니다. 내 코드는 다음과 같습니다 시간 beacuse 무한 루프부동 소수점 표현의 정확한 표현을 반복하는 방법은 무엇입니까?
using nld = std::numeric_limits<float>;
auto h = nld::epsilon();
for (; h < 1; h = std::nextafter(h, 1)) {
std::cerr << "h: " << h << std::endl;
}
정확하게 표현할 수있는, 그래서 nextafter
이 그것을 반환 유지합니다. 또한 루프에서 기계 엡실론을 h에 추가하면 절단되지 않습니다. 부동 소수점 숫자는 균등하지 않습니다. IEEE754 숫자의 정확한 표현을 어떻게 반복합니까?
not equally spaced
문제는 여기에 자신을 제시 : 정수 notmal 긍정적 인 수레 위해 작동 나를
'nextafter'는 꼭해야 할 일입니다. h가 정확히 표현할 수 있다는 의견을 이해할 수 없습니다. 물론 변수에 저장된 모든 * 부동 소수점 숫자는 정확하게 표현할 수 있습니다. 당신의 시스템은'nextafter'의'float' 과부하가 부족합니다, 즉'float'에서 표현할 수없는 * 값을 반환 할 수있는'double' 구현을 의미합니까? 그렇다면'nextafterf'를 시도해 볼 수 있습니다. – hvd
@hvd nextafter (h, 1)가 계속 나를 위해'h '를 반환합니다. 나는 그것을 nextafterf에 강제로 넣으려고 할 것이다. – alisianoi
@hvd 오, 맞다. 플로트로 작업해야 할 때,'nextafterf' (f가 플로팅 포인트 넘버를 반복한다. 밝혀 지, 나의'nextafter는 실제로'double'이었다, 고마워! – alisianoi