কখন একটি ট্রিগ ফাংশন করা উচিত, একটি ডিগ্রি আর্গুমেন্ট সহ, ফিরে -0.0?


10

ত্রিকোণমিতি ফাংশন তৈরি my_sind(d), my_cosd(d), my_tand(d), যে একটি রেডিয়ান এক একটি ডিগ্রী যুক্তি বদলে ব্যবহার করা হয় এবং 90 এর গুণিতক এ সঠিক উত্তর প্রদান আমি লক্ষ্য করেছি যে ফলাফলের কখনও কখনও ছিল -0.0বদলে 0.0

my_sind( 0.0) -->  0.0
my_sind(-0.0) --> -0.0

my_sind(180.0) --> -0.0
my_sind(360.0) -->  0.0

sin()এবং tan()সাধারণত প্রদত্ত চিহ্ন শূন্য ইনপুটটির জন্য একই চিহ্ন শূন্য ফলাফল প্রদান করে। এটি উপলব্ধি করে যা সেই ইনপুটগুলির সাথে my_sin()মেলে sin()

my_sind( 0.0) alike sin( 0.0) -->  0.0
my_sind(-0.0) alike sin(-0.0) --> -0.0

প্রশ্ন হল কি পূর্ণ সংখ্যা জন্য non_zero_n/ ফলাফলের কি কখনো ফেরত দিতে পারেন উচিত -0.0জন্য my_sind(180*non_zero_n), my_cosd(180*n + 180), my_tand(180*non_zero_n)?

এটি কোড করা যথেষ্ট সহজ তাই কেবল f(-0.0)উত্পাদন করে -0.0এবং এটি দিয়েই হয়ে যায়। সরল বিস্মিত যদি অন্য কোনও ( শূন্যহীন ) জন্য অন্য কোনও f(x)ফেরত দেওয়ার কোনও কারণ রয়েছে এবং সেই চিহ্নটি বীমাকরণের গুরুত্ব কী।-0.0x


দ্রষ্টব্য: এটি 0.0বনাম কেন হয় এমন কোনও প্রশ্ন নয় -0.0। এই কারণেই cos(machine_pi/4)ফিরে আসে না 0.00.0বা এর প্রজন্মকে কীভাবে নিয়ন্ত্রণ করা যায় তা নিয়ে প্রশ্নই আসে না -0.0। আমি এটি একটি নকশা প্রশ্ন হিসাবে সেরা দেখতে।

উত্তর:


4

"ন্যূনতম আশ্চর্য" এর নকশার নীতিটি পরামর্শ দেয় যে আমরা দিকনির্দেশের জন্য পূর্বে প্রতিষ্ঠিত কার্যকারিতাটির দিকে চেয়ে আছি। এই ক্ষেত্রে, নিকটতম প্রতিষ্ঠিত কার্যকারিতা আইইইই স্ট্যান্ড 754-2008 (আইওইই স্ট্যান্ডার্ড ফর ফ্লোটিং-পয়েন্ট অ্যারিমেটেটিক), বিভাগ 9 এ প্রবর্তন করা হয়েছে sinpiএবং cospiএই ফাংশনগুলি বর্তমান আইএসও সি এবং আইএসও সি ++ মানের অংশ নয়, তবে বিভিন্ন প্রোগ্রামিং প্ল্যাটফর্মের গণিত গ্রন্থাগারগুলিতে অন্তর্ভুক্ত করা হয়েছে, উদাহরণস্বরূপ CUDA।

এই ফাংশনগুলি গণনা সিন (πx) এবং কোস ()x), যেখানে π সহ গুণটি ফাংশনের অভ্যন্তরে স্পষ্টভাবে ঘটে। tanpiসংজ্ঞায়িত করা হয় নি, তবে গাণিতিক সমতুল্যতার ভিত্তিতে কার্যকারিতা সরবরাহ করা হবে বলে ধারনা করা যেতে পারে tanpi(x) = sinpi(x) / cospi(x)

আমরা এখন বর্ণনা করতে পারেন sind(x) = sinpi(x/180), cosd(x) = cospi(x/180), tand(x) = tanpi(x/180)একটি স্বজ্ঞামূলক পদ্ধতিতে। আইইইই -৫ 75৪ এর ধারা 9.1.2 এর জন্য sinpiএবং এর জন্য বিশেষ যুক্তিগুলির পরিচালনা পরিচালনা করে cospi। নির্দিষ্টভাবে:

sinPi (+ n) এর মান 0 হয় এবং ধনাত্মক পূর্ণসংখ্যার জন্য sinPi ()n) −0 হয়। এটি যথাযথ বৃত্তাকার মোডের অধীনে বোঝা যাচ্ছে যে sinPi ()x) এবং PsinPi (x) সমস্ত এক্স এর জন্য একই সংখ্যা (বা উভয় NaN)। কোস্টপি (এন + ½) কোনও পূর্ণসংখ্য n এর জন্য +0 হয় যখন এন + ½ উপস্থাপনযোগ্য হয়।

আইইইই 754-2008 স্ট্যান্ডার্ড উদ্ধৃত প্রয়োজনীয়তার জন্য যুক্তি দেয় না, তবে, সম্পর্কিত বিভাগের প্রাথমিক খসড়াটিতে বলা হয়েছে:

যদি ফাংশনের মান শূন্য হয় তবে এই 0 এর চিহ্নটি গাণিতিক ফাংশনের সাইন ফাংশনের অবিচ্ছিন্ন প্রসারকে বিবেচনা করে সেরা নির্ধারণ করা হয়।

754 ওয়ার্কিং গ্রুপ মেল সংরক্ষণাগারটির পেরাসাল অতিরিক্ত অন্তর্দৃষ্টি পেতে পারে, এটির মাধ্যমে খননের সময় আমার হাতে নেই। বাস্তবায়ন sind(), cosd()এবং tand()উপরে বর্ণিত হিসাবে, আমরা তারপরে উদাহরণের এই টেবিলে পৌঁছাচ্ছি:

SIND
 angle value 
  -540 -0
  -360 -0
  -180 -0
     0  0
   180  0
   360  0
   540  0

COSD
 angle value
  -630  0
  -450  0
  -270  0
   -90  0
    90  0
   270  0
   450  0

TAND
 angle value
  -540  0
  -360 -0
  -180  0
     0  0
   180 -0
   360  0
   540 -0

5

sin () এবং ট্যান () সাধারণত প্রদত্ত চিহ্ন শূন্য ইনপুটটির জন্য একই চিহ্ন শূন্য ফলাফল প্রদান করে

এটি যেহেতু সাধারণত সত্য হতে পারে:

  • গতি / সঠিকতা । ছোট যথেষ্ট ডাবলস জন্য, -এর সর্বোত্তম উত্তর sin(x)নেই x। অর্থাত্, এর চেয়ে কম সংখ্যার জন্য 1.49e-8, x এর সাইন এর নিকটতম ডাবলটি আসলে x নিজেই ( পাপের জন্য গ্লাবসি উত্স কোড দেখুন () )।

  • বিশেষ ক্ষেত্রে সামলাচ্ছে

    কয়েকটি অসাধারণ গণিত অপারেশন শূন্যের চিহ্ন দ্বারা প্রভাবিত হয়; উদাহরণস্বরূপ "1/(+0) = +inf"কিন্তু "1/(-0) = -inf"। এর কার্যকারিতা ধরে রাখতে, সাইন বিটটি অবশ্যই ধারাবাহিকতা বিবেচনা থেকে প্রাপ্ত নিয়ম অনুসারে নির্দিষ্ট গাণিতিক ক্রিয়াকলাপগুলির মাধ্যমে প্রচার করতে হবে।

    পাপ (জেড) এবং ট্যান (জেড) এবং তাদের বিপরীতমুখী এবং হাইপারবোলিক অ্যানালগগুলির মতো প্রাথমিক ট্রান্সসেন্টেন্টাল ফাংশনগুলির বাস্তবায়ন, আইইইই স্ট্যান্ডার্ড দ্বারা সুনির্দিষ্ট না হলেও, একই ধরণের নিয়ম অনুসরণ করবে বলে আশা করা যায়। এর বাস্তবায়নের sin(z) প্রত্যাশার z পাশাপাশি এর মানটির পুনরুত্পাদন আশা করা হয়z = ±O

    ( জটিল প্রাথমিক কাজকর্মের জন্য শাখা কাট বা ডাব্লু। কাহান কর্তৃক কোনও কিছুর সাইন বিট সম্পর্কে প্রচুর অ্যাডো )

    নেতিবাচক স্বাক্ষরিত শূন্যটি একতরফা সীমা হিসাবে নীচে থেকে 0 পৌঁছানোর গাণিতিক বিশ্লেষণ ধারণাটি প্রতিধ্বনিত করে (বিবেচনা করুন 1 / sin(x): শূন্যের চিহ্নটি একটি বিশাল পার্থক্য করে))

সম্পাদনা

দ্বিতীয় পয়েন্ট বিবেচনা করে আমি my_sindতাই লিখছি যে:

my_sind(-0.0) is -0.0
my_sind(0.0) is 0.0

সর্বশেষ সি মানক (F.10.1.6 sinএবং F.10.1.7 tan, একজন সাইন শূন্য দিয়ে বাস্তবায়নের), নির্দিষ্ট করে যে যদি যুক্তি ±0, এটা অপরিবর্তিত ফিরিয়ে দেওয়া হয়

সম্পাদনা 2

অন্যান্য মানগুলির জন্য আমি এটি প্রায় অনুমানের বিষয় বলে মনে করি। দেওয়া M_PI<π:

0 = sin(π) < sin(M_PI)  1.2246467991473532e-16  +0.0
0 = sin(-π) > sin(-M_PI)  -1.2246467991473532e-16  -0.0
0 = sin(2*π) > sin(2*M_PI)  -2.4492935982947064e-16
0 = sin(-2*π) < sin(-2*M_PI)  2.4492935982947064e-16

সুতরাং যদি my_sind180 multip এর গুণকগুলিতে সঠিক উত্তর সরবরাহ করে তবে এটি ফিরে আসতে পারে +0.0বা -0.0(আমি অন্যটির চেয়ে বেশি পছন্দ করার কোনও স্পষ্ট কারণ দেখতে পাচ্ছি না)।

যদি my_sindকিছু আনুমানিকতা ব্যবহার করে (যেমন একটি degree * M_PI / 180.0রূপান্তর সূত্র), তবে এটি কীভাবে সমালোচনামূলক মানগুলিতে পৌঁছেছে তা বিবেচনা করা উচিত।


আপনার সম্পর্কে কি চিন্তা sind(180), sind(-180), sind(360), sind(-360),...?
chux - মনিকা

আপডেটের জন্য ধন্যবাদ. আমার পোস্টটি পরিষ্কার নাও হতে পারে। মূল প্রশ্ন উচিত my_trig(x)কি কখনো ফিরে আসতে -0.0যখন |x|নয় 0.0?
chux

"সুতরাং যদি আমার_সিন্ড 180 এর গুণকে সঠিক উত্তর সরবরাহ করে তবে এটি +0.0 বা -0.0 ফিরে আসতে পারে (অন্যটির চেয়ে বেশি পছন্দ করার কোনও স্পষ্ট কারণ আমি দেখতে পাচ্ছি না)"। এটি এখন পর্যন্ত নিকটতম আলোচনার পয়েন্ট। আমি ভাবছি "সর্বনিম্ন বিস্ময়ের মূলনীতি" সর্বদা ফিরে আসার জন্য উত্সাহ দেয় +0.0, তবে -0.0কিছু পরিস্থিতিতে (ব্যতীত x == +/-0.0) কিছুটা ফিরে আসার বাধ্যতামূলক কারণ আছে কিনা তা দেখার জন্য ।
chux

@ চুক্স: আমি মনে করি বহুগুণের জন্য 180.0, সেই মানগুলি অনুসারে আপত্তিজনক মেশিনের যথার্থতার মান পরীক্ষা করতে হবে। অর্থাত্, ক্ষুদ্রতম বৃদ্ধি / হ্রাস যা সেই সংখ্যাগত ফর্ম্যাটে একটি আলাদা উপস্থাপনযোগ্য মান দেয়। তারপরে, মানটি সত্য মানের সাথে তুলনা করুন এটি প্লাস সাইডে বা বিয়োগের দিকে পড়বে কিনা তা দেখার জন্য value
রওং

@ রওয়ং এই ধারণার জন্য ধন্যবাদ। 90,0 এর গুণিতক ডিগ্রী , সঠিক sind(double degrees) এবং cosd(double degrees)মান করা যেতে পারে: -1.0, +0.0, +1.0। এই পোস্টটি -0.0কখনও ফিরে (সিন্ড (-0.0) বাদে দেওয়া উচিত )। দ্রষ্টব্য: সরল পদ্ধতির ব্যবহার sind()করে নাsin(x/360*M_PI)
chux -

3

লাইব্রেরি -0 থেকে +0 পার্থক্য করার চেষ্টা করে না। আইইইই 754 এই পার্থক্য সম্পর্কে কিছুটা চিন্তিত ... আমি [গণিতের মধ্যে] ফাংশনগুলি খুঁজে পেয়েছি কিছুইর লক্ষণ সম্পর্কে বিরক্ত না করে লেখার পক্ষে যথেষ্ট শক্ত। - পিজে প্লুগার, স্ট্যান্ডার্ড সি লাইব্রেরি , 1992, পৃষ্ঠা 128।

সাধারণত, ট্রিগ ফাংশনগুলিতে সি স্ট্যান্ডার্ডের সাথে শূন্যের চিহ্নটি ফেরত দেওয়া উচিত ... যা আচরণটিকে অপরিজ্ঞাত করে ফেলে।

অপরিবর্তিত আচরণের ক্ষেত্রে, অন্তত বিস্মিত হওয়ার নীতিটি সংশ্লিষ্ট ফাংশনটির আচরণ থেকে নকল করার পরামর্শ দেয় math.h। এটিকে যুক্তিসঙ্গত গন্ধযুক্ত, যখন math.hশূন্যের চিহ্নের উপর নির্ভর করে ঠিক কোডে বাগগুলি প্রবর্তন করার মতো গন্ধে সম্পর্কিত ফাংশনের আচরণ থেকে সরিয়ে ফেলা হয়।


math.h+/- পাই / 2 বা +/- পাই এর মতো যুক্তি দেওয়া হলে ট্রিগার ফাংশনগুলি 0.0 প্রদান করে না কারণ এই ফাংশনগুলি কেবল +/- পাই / 2, ইত্যাদির নিকটে প্রতিনিধিত্বমূলক মান নিতে পারে । এই "কাছাকাছি" মানগুলি 0.0 এর কাছাকাছি ফলাফল দেয়। যেহেতু std গ্রন্থাগারটি ট্রিগ ফাংশন ( sin cos tan) কোনও ইনপুট (+/- 0.0 ব্যতীত) 0.0 (বা -0.0) ফেরায় না তবে my_sind (), my_cosd (), মাই_ফ্যান্ড () 0.0 (বা -0.0) ফিরে আসতে পারে নকল করতে 0.0 আচরণ নেই।
chux - মনিকা

@ chux যে ভিত্তিতে sin(-0.0)ফিরে আসা উচিত -0তা সন্দেহজনক। এটি আইইইই স্ট্যান্ডার্ডটির একটি বাস্তবায়ন বিশদটিকে ত্রিকোণমিতিক নীতি হিসাবে বিবেচনা করে। যদিও আইইইই বাস্তবায়নের মধ্যে অন্তর্ভুক্ত দুটি অন্তরগুলির সীমা হিসাবে শূন্যের একটি সাধারণ গাণিতিক নীতি রয়েছে, তবে এটি সাধারণ ত্রিকোণমিতির মধ্যে না হয়ে বিমূর্ততার সেই স্তরে ঘটে [সুতরাং আপনার ত্রিকোণমিতিক ক্রিয়াগুলি কীভাবে ফিরে আসবে তার পরিবর্তনশীলতা]। সবচেয়ে ভাল যেটি ঘটতে পারে তা হ'ল আপনি একটি স্বেচ্ছাসেবী সম্মেলনকে সংজ্ঞায়িত করতে পারেন তবে এটি math.hশূন্যের চিহ্নের চেয়ে অচলাবস্থা থেকে আলাদা হবে ।
বেন রজারস

নোট: আমি পরামর্শ নই sin(-0.0)ফেরত পাঠাবেন -0.0, কিন্তু যে my_sind(x)সুসংগত হওয়া আবশ্যক sin(x)যখন xহয় +/-0.0। IOW: পূর্ববর্তী অনুশীলন অনুসরণ করুন। আরও প্রশ্ন নিজেই যখন আরও কি কি করতে হবে সম্পর্কে অন্যান্য x != 0.0, my_sind(x)কখনও -0.0যেমন হিসাবে ফিরে আসা my_sind(180), ইত্যাদি? হতে পারে আপনার উত্তর / মন্তব্যে ঠিকানা রয়েছে - তবে আমি এটি দেখিনি।
chux - মনিকা

@ chux যদি আচরণটি সংজ্ঞায়িত হয় তবে তা অপরিবর্তিত। সি এর মতোই। বিশ বছর আগে লেখার সময় +0বনাম বনাম সম্পর্কে চিন্তা করেনি didn't পার্থক্যটি সম্পর্কে আপনার হতাশার সমস্যাটি কী সমাধান করছে তা আমার কাছে স্পষ্ট নয়। -0math.h
বেন rudgers

1
আশা করি আপনি দেখতে পাচ্ছেন যে sin(rad)কোনও মান rad>0এবং কোনও নির্ভুলতার জন্য ভালভাবে প্রয়োগ করা কখনই 0.0পাই অযৌক্তিক বলে ফল পাবেন না । [সূত্র] (www.csee.umbc.edu/~phatak/645/supl/Ng-ArgReduction.pdf) কিন্ত my_sind(deg)একটি সঠিক উৎপাদ 0.0(হয় + অথবা -) প্রতিটি একাধিক 180.0যেমন মান 0.0 সঠিক গাণিতিক ফলাফল। "সর্বনিম্ন বিস্ময়ের মূলনীতি" এই ক্ষেত্রে 0.0 ফিরিয়ে দেওয়ার পরামর্শ দেয় sugges আমার প্রশ্ন -0.0এই ক্ষেত্রে কখনও ফিরে আসা উচিত ?
chux - মনিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.