একটি দ্রুত সাইন ফাংশন আছে?


25

আমি প্রজন্মের 3 ডি পার্লিন শব্দে কাজ করছি। সি # ম্যাথ লাইব্রেরিটি আমার যা প্রয়োজন তার জন্য ওভারকিলের মতো বলে মনে হচ্ছে কারণ এর বেশিরভাগ ফাংশনগুলি ডাবল পারসিজন ব্যবহার করে। গোলমাল তৈরি করতে আমি বেশ কয়েকটি জায়গায় ম্যাথ.সিন () ব্যবহার করি। কেউ কি দ্রুততম সাইন ফাংশন সম্পর্কে জানেন?

উত্তর:


32

সাইন ফাংশনটির মানটি প্রাক্কলিত করতে আপনি একটি প্যারাবোলা ব্যবহার করতে পারেন। হুবহু -pi / 2 এবং পাই / 2 এ শিকড় থাকার সুবিধা রয়েছে যা সাধারণত টেলরসারিজ বা ম্যাক্লাউরিনসরিজের উপর ভিত্তি করে অন্যান্য দ্রুত অনুমানের ক্ষেত্রে হয় না ।

public float Sin(float x)
{
    const float B = 4 / PI;
    const float C = -4 / (PI*PI);

    return -(B * x + C * x * ((x < 0) ? -x : x));
} 

এখানে আসল সাইন ফাংশনের সাথে একটি তুলনা করা হয়েছে:

বিকল্প পাঠ


3
এটি প্রকৃতপক্ষে একটি দুর্দান্ত সমাধান। এখানে দেবমাস্টার ডটকমের একটি চমৎকার নিবন্ধ রয়েছে যা এটি কেন কাজ করে এবং কিছু প্রয়োগের বিবরণ দেয় তা বর্ণনা করে: devmaster.net/forums/showthread.php?t=5784
reverbb

আমি সি # সম্পর্কে জানি না, তবে বেশিরভাগ সি পরিবেশে অ্যাবস () ফাংশনটি অনুকূলিতকরণের পরে সম্ভবত একটি শাখার (?? অপারেটর) চেয়ে দ্রুত হবে।

3
আমি ম্যাথ.এবস () কলটি সরিয়ে দিয়েছি কারণ আমি ধরে নিয়েছিলাম যে এই কোডটি Xbox 360 বা উইন্ডোজ ফোন 7 এ চলতে পারে X এক্সবক্স 360-এ জেআইটি সংকলক কোনও কিছুর সাথে ইনলাইন করে না। ম্যাথ.এবস () এর কাছে কল আসলে ব্যয়বহুল।
zfedoran


1
@zfedoran আপনি রিটার্নের মানটিকে কেন অস্বীকার করবেন? এটি নেতিবাচক সাইন ওয়েভ হিসাবে উপস্থিত হয়।
ড্যানিয়েল পেন্ডারগাস্ট

12

আপনার পাপ () ফাংশনে ইনপুট মানগুলির সীমাটি কী ? আপনি এটির জন্য যা ব্যবহার করছেন, মনে হচ্ছে এগুলি সীমাবদ্ধ হতে পারে যার অর্থ আপনি মানগুলি প্রাক-গণনা করতে পারেন । উদাহরণস্বরূপ, আপনি যদি ইনপুট মানগুলিকে নিকটতম ডিগ্রীতে সীমাবদ্ধ করে থাকেন তবে আপনার কাছে কেবলমাত্র 360 সম্ভাব্য মান রয়েছে - কেবল সেগুলি প্রাক-গণনা করুন এবং একটি টেবিলের মধ্যে সঞ্চয় করুন।

আপনার যদি সামান্য আরও মান প্রয়োজন হয় তবে একটি দশমিক স্থানে বলুন, আপনি টেবিলটি থেকে বিচ্ছিন্ন হতে পারেন - আমি পার্লিন শব্দের সাথে পরিচিত নই , তবে "গোলমাল" শব্দটি মনে হয় এটি উচ্চতর নির্ভুলতার প্রয়োজন হয় না। :) (আপনি কেবল একটি বৃহত টেবিল তৈরি করতে পারেন, 3600 এন্ট্রি খুব বেশি জায়গা নয়)।


3
গতি যদি আপনার এক নম্বর উদ্বেগ হয় এবং আপনি কিছুটা নির্ভুলতার জন্য ত্যাগ করতে কিছু মনে করেন না, এটি সেরা উত্তর।
আক্রমণ

1
আমি "সেরা" সম্পর্কে জানি না - অন্য উত্তরে যেমন দেখানো হয়েছে, আপনি পাঁচটি অপস + অ্যাবস-এ আরও একটি খুব ভাল অনুমান পেতে পারেন (যার গতি আপনার খিলান / সংকলকের উপর নির্ভর করে তবে প্রায়শই শাখাবিহীন থাকে)। যদি অনুসন্ধানের টেবিলটি ক্যাশে না থাকে তবে এটি অনেক ধীর হতে চলেছে।

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