खोजने के लिए कोड लिखने का प्रयास कर रहा है मैं सी (यानी फ्लोट, डबल और लम्बा डबल) में विभिन्न फ़्लोटिंग पॉइंट प्रारूपों के लिए सटीक स्तर का पता लगाने की कोशिश कर रहा हूं।मशीन ईपीएसलॉन
#include <stdio.h>
#define N 100000
int main(void)
{
float max = 1.0, min = 0.0, test;
int i; /* Counter for the conditional loop */
for (i = 0; i < N; i++) {
test = (max + min)/2.0;
if((1.0 + test) != 1.0) /* If too high, set max to test and try again */
max = test;
if((1.0 + test) == 1.0) /* If too low, set min to test and try again */
min = test;
}
printf("The epsilon machine is %.50lf\n", max);
return 0;
}
यह ~ 2^-64 की उम्मीद के रूप में मोटे तौर पर की मूल्य देता है: यहाँ कोड मैं इस समय का उपयोग कर रहा है। हालांकि जब मैं डिकलेरेशंस को युगल या 'लंबे युगल' में बदलता हूं तो मुझे वही उत्तर मिलता है, मुझे एक छोटा सा मूल्य मिलना चाहिए लेकिन मैं नहीं करता हूं। किसी को कोई विचार है? ,
if((1.0 + test) != 1.0)
यहाँ 1.0 एक डबल स्थिर है तो यह एक डबल करने के लिए अपने नाव को बढ़ावा देने और एक डबल के रूप में इसके अलावा प्रदर्शन कर रहा है:
बदलाव नहीं होता से एक 23-बिट अपूर्णांश है? आप 2^-64 की अपेक्षा क्यों करेंगे? – Rup