ফোর্টরনে ডাবল স্পষ্টতা মানগুলি কীভাবে সেট করবেন


10

সম্প্রতি, আমি FORTRAN95 নিয়ে একটি উদ্ভট সমস্যার মুখোমুখি হয়েছি। আমি নিম্নলিখিত হিসাবে ভেরিয়েবলগুলি এক্স এবং ওয়াইটি চালু করেছি:

X=1.0
Y=0.1

পরে আমি তাদের একসাথে যুক্ত করব এবং ফলাফলটি মুদ্রণ করব:

1.10000000149012

ভেরিয়েবলগুলি পরীক্ষা করার পরে মনে হয় যে 0.1 যথাযথতার সাথে ডাবল যথার্থতার প্রতিনিধিত্ব করে না। এটি এড়ানোর কোনও উপায় আছে কি?

উত্তর:


21

এটি করার আরেকটি উপায় হ'ল প্রথমে আপনি স্পষ্টভাবে SELECTED_REAL_KIND অন্তর্নিহিত ব্যবহার করে ভেরিয়েবলটিতে নির্ভুলতা নির্দিষ্ট করতে চান এবং তারপরে এটি ভেরিয়েবলগুলি সংজ্ঞায়িত করতে এবং প্রারম্ভিক করতে ব্যবহার করতে পারেন। কিছুটা এইরকম:

INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(15)
REAL(dp) :: x
x = 1.0_dp

এইভাবে এটি করার একটি দুর্দান্ত সুবিধা হ'ল dpআপনি কোনও মডিউলটিতে সংজ্ঞা রাখতে পারেন , তারপরে USEযেখানে প্রয়োজন সেখানে মডিউলটি। এখন আপনি যদি কখনও আপনার প্রোগ্রামের যথার্থতা পরিবর্তন করতে চান তবে আপনার পরিবর্তনশীল আরম্ভের শেষে dpসমস্তগুলি অনুসন্ধান এবং প্রতিস্থাপনের পরিবর্তে আপনাকে কেবল সেই এক জায়গার সংজ্ঞাটি পরিবর্তন করতে হবে D0। (এ কারণেই আমি 1.0D-1ওয়াই সংজ্ঞায়িত করার জন্য সিনট্যাক্সটি ব্যবহার না করার পরামর্শ দিয়েছি It এটি কাজ করে তবে ভবিষ্যতে সমস্ত দৃষ্টান্ত খুঁজে পাওয়া ও পরিবর্তন করা আরও কঠিন করে তোলে))

ফোর্টরান উইকের এই পৃষ্ঠাটিতে কিছু ভাল অতিরিক্ত তথ্য দেওয়া হয়েছে SELECTED_REAL_KIND


এটা ঠিক, এটি স্ট্যান্ডার্ড পদ্ধতির হওয়া উচিত।
ওঁদেজ এর্তিক

এবং কতক্ষণ লোকেরা তাদের প্রোগ্রামগুলির যথাযথতা কোনওভাবেই পদ্ধতি ছাড়াই এবং পরীক্ষার মাধ্যমে অন্ধভাবে পরিবর্তন করতে হয়? _dpস্কিমটি ব্যবহারের মূল কারণটি যাতে যথাযথভাবে একটি পোর্টেবল উপায়ে সংজ্ঞায়িত করা হয়।
jo72

12

আপনি ভেরিয়েবলগুলি ডাবল নির্ভুলতা হিসাবে ঘোষণা করেছেন, তবে আপনি তাদের একক নির্ভুলতার মান দিয়ে আরম্ভ করেছেন।

আপনি লিখতে পারতেন:

X=1.0d0
Y=1.0d-1

আক্ষরিক দ্বৈত নির্ভুলতা তৈরি করার আরেকটি উপায় নীচে ব্যারনের উত্তর , এটি আপনাকে পরবর্তী সময়ে আপনার ভেরিয়েবলের যথার্থতা পরিবর্তন করার অনুমতি দেয় with


1
আমি মনে করি যে নীচের পোস্টে বর্ণিত 1.0_dp পদ্ধতিটি ব্যবহার করা উচিত।
ওয়ান্দেজ এর্ত্তিক

1
আমি দ্বিতীয় ওন্ডেজেজার্তিকের মন্তব্য দ্বিতীয় - ব্যারনের উত্তর সবচেয়ে ভাল।
অস্কারবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.