নিম্নলিখিত কোড সংকলন:
double getDouble()
{
double value = 2147483649.0;
return value;
}
int main()
{
printf("INT_MAX: %u\n", INT_MAX);
printf("UINT_MAX: %u\n", UINT_MAX);
printf("Double value: %f\n", getDouble());
printf("Direct cast value: %u\n", (unsigned int) getDouble());
double d = getDouble();
printf("Indirect cast value: %u\n", (unsigned int) d);
return 0;
}
ফলাফল (এমএসভিসি x86):
INT_MAX: 2147483647
UINT_MAX: 4294967295
Double value: 2147483649.000000
Direct cast value: 2147483648
Indirect cast value: 2147483649
আউটপুট (এমএসভিসি x64):
INT_MAX: 2147483647
UINT_MAX: 4294967295
Double value: 2147483649.000000
Direct cast value: 2147483649
Indirect cast value: 2147483649
ইন মাইক্রোসফট ডকুমেন্টেশন থেকে ধর্মান্তর সর্বোচ্চ মান পূর্ণসংখ্যা স্বাক্ষর করেছেন কোনো উল্লেখ নেই double
যাও unsigned int
।
উপরের সমস্ত মানগুলি যখন কোনও ফাংশনটির প্রত্যাবর্তন INT_MAX
হয় 2147483648
তখন তা কেটে নেওয়া হয় ।
আমি প্রোগ্রামটি তৈরি করতে ভিজ্যুয়াল স্টুডিও 2019 ব্যবহার করছি । এটি জিসিসিতে ঘটে না ।
আমি কিছু ভুল করছি? রূপান্তর double
করার কোনও নিরাপদ উপায় আছে কি unsigned int
?