আমি std::complex<>
আমার প্রোগ্রামগুলিতে ব্যবহার করি, এবং প্রতিটি নতুন সংকলক বা সংকলক আপগ্রেডের জন্য সংকলক পতাকাগুলি এবং workaround সহ লড়াই করতে হবে। আমি এই মারামারিগুলিকে কালানুক্রমিকভাবে গণনা করার চেষ্টা করব:
std::norm
|z|2|z|-ffast-math
- লিনাক্স (বা লিঙ্কার) এ ইন্টেল আইসিসি সংকলকটি
std::arg
নির্দিষ্ট কনফিগারেশনের অধীনে একটি অন- অপ্টে সংকলিত (নির্দিষ্ট জিসিসি-সংস্করণের সাথে লিঙ্কের সামঞ্জস্য)। সমস্যাটি প্রায়শই পুনরায় উত্থিত হয়, তাই std::arg
এটি দ্বারা প্রতিস্থাপন করতে হয়েছিল atan2(imag(),real())
। তবে নতুন কোড লেখার সময় এটি ভুলে যাওয়া খুব সহজ ছিল।
- প্রকারটি
std::complex
বিল্ড-ইন সি 99 জটিল ধরণের চেয়ে আলাদা কল কনভেনশন (= এবিআই) এবং নতুন জিসিসি সংস্করণগুলির জন্য বিল্ট-ইন ফোর্টরান জটিল ধরণের ব্যবহার করে।
-ffast-math
অপ্রত্যাশিতভাবে বিন্দু ব্যতিক্রম ভাসমান সামলাচ্ছে সঙ্গে কম্পাইল পতাকা মিথস্ক্রিয়া। যা ঘটে তা হ'ল সংকলকটি লুপগুলি থেকে বিভাজনগুলি টান দেয়, যার ফলে রানটাইমগুলিতে division by zero
ব্যতিক্রম ঘটে। এই ব্যতিক্রমগুলি লুপের অভ্যন্তরে কখনই ঘটত না কারণ পার্শ্ববর্তী যুক্তির কারণে সংশ্লিষ্ট বিভাগটি সংঘটিত হয়নি। এটি সত্যিই খারাপ ছিল, কারণ এটি একটি লাইব্রেরি ছিল যা প্রোগ্রাম থেকে পৃথকভাবে সংকলিত হয়েছিল যা ভাসমান পয়েন্ট ব্যতিক্রম হ্যান্ডিং (বিভিন্ন সংকলন পতাকা ব্যবহার করে) ব্যবহার করে এবং এই সমস্যাগুলিতে চালিত হয় (সম্পর্কিত দলগুলি বিশ্বের বিপরীত অংশে বসে ছিল, তাই) এই সমস্যাটি সত্যই খারাপ সমস্যার কারণ হয়েছে)। এটি আরও যত্ন সহকারে সংকলক দ্বারা ব্যবহৃত অপটিমাইজেশন করে সমাধান করা হয়েছিল।
- গ্রন্থাগারটি প্রোগ্রামটির অংশ হয়ে গেছে এবং আর এটি
-ffast-math
সংকলন পতাকা ব্যবহার করে না । একটি নতুন জিসিসি সংস্করণে আপগ্রেড হওয়ার পরে, পারফরম্যান্সটি একটি বিশাল ফ্যাক্টর দ্বারা কমেছে। আমি এখনও এই সমস্যাটি বিশদভাবে তদন্ত করি নি, তবে আমি আশঙ্কা করি এটি C99 এনেক্সেক্স জি এর সাথে সম্পর্কিত । আমাকে স্বীকার করতে হবে যে জটিল সংখ্যার জন্য গুণনের এই বিস্ময়কর সংজ্ঞায় আমি সম্পূর্ণ বিভ্রান্ত হয়েছি এবং অন্য সংস্করণগুলি ভুল পথে চালিত হয়েছে বলে দাবি করেও এর বিভিন্ন সংস্করণ উপস্থিত রয়েছে বলে মনে হয়। আমি আশা করি যে -fcx-limited-range
সংকলন পতাকাটি সমস্যার সমাধান করবে, কারণ -ffast-math
এই নতুন জিসিসি সংস্করণটির সাথে সম্পর্কিত আরও একটি সমস্যা আছে বলে মনে হচ্ছে ।
-ffast-math
কম্পাইল পতাকার আচরণ তোলে NaN
জিসিসি নতুন সংস্করণের জন্য সম্পূর্ণরূপে অনিশ্চিত (এমনকি isnan
প্রভাবিত হয়)। একমাত্র NaN
কর্মসূচী মনে হয় প্রোগ্রামটির কোনও ঘটনা এড়ানোর জন্য যা অস্তিত্বের উদ্দেশ্যকে পরাস্ত করে NaN
।
এখন আপনি জিজ্ঞাসা করতে পারেন যে আমি অন্তর্নির্মিত জটিল ধরণের এবং std::complex
এই কারণগুলির জন্য পরিত্যাগ করার পরিকল্পনা করছি । আমি অন্তর্নির্মিত ধরণের সাথে থাকব, যতক্ষণ না আমি সি ++ সহ থাকি। যদি সি ++ এর জন্য বৈজ্ঞানিক কম্পিউটিংয়ের জন্য সম্পূর্ণ অপ্রয়োজনীয় হয়ে ওঠার ব্যবস্থা করা উচিত তবে আমি বরং এমন একটি ভাষায় স্যুইচ করার কথা বিবেচনা করব যা বৈজ্ঞানিক কম্পিউটিংয়ের সাথে সম্পর্কিত সমস্যাগুলির আরও যত্ন নেয় more
z
প্রকারের একটি lvalue অভিব্যক্তি CVstd::complex<T>
তারপরreinterpret_cast<cv T(&)[2]>(z)
এবংreinterpret_cast<cv T(&)[2]>(z)[0]
প্রকৃত অংশ মনোনীত করিবেz
, এবংreinterpret_cast<cv T(&)[2]>(z)[1]
এর কাল্পনিক অংশ মনোনীত করিবেz
। জটিল সংখ্যার অ্যারে সম্বোধন করা হয়।