উত্তর:
এই আমি কী পেয়েছি যখন আমি এই সন্দেহ ছিল।
mysql> create table numbers (a decimal(10,2), b float);
mysql> insert into numbers values (100, 100);
mysql> select @a := (a/3), @b := (b/3), @a * 3, @b * 3 from numbers \G
*************************** 1. row ***************************
@a := (a/3): 33.333333333
@b := (b/3): 33.333333333333
@a + @a + @a: 99.999999999000000000000000000000
@b + @b + @b: 100
দশমিক এই ক্ষেত্রে কী করা উচিত ঠিক তা করেছিল, এটি বাকী অংশ কেটে ফেলেছে, এভাবে 1/3 অংশ হারাবে।
সুতরাং অঙ্কের জন্য দশমিকটি আরও ভাল তবে বিভাগগুলির জন্য অবশ্যই কিছুটা অবধি অবশ্যই ভাসমানটি ভাল। মানে, ডেসিমাল ব্যবহার করা আপনাকে কোনও উপায়েই "ব্যর্থ প্রমাণ গাণিতিক" দেবে না।
আশাকরি এটা সাহায্য করবে.
@a99.999999999000000000000000000000 ডেসিমাল দিচ্ছেন না ? যা প্রযুক্তিগতভাবে সঠিক।
বেশিরভাগ পরিবেশে একটি "ফ্লোট" বাইনারি ফ্লোটিং-পয়েন্ট টাইপ। এটি নির্ভুলভাবে বেস -২ মানগুলি (একটি নির্দিষ্ট বিন্দুতে) সঞ্চয় করতে পারে তবে অনেকগুলি বেস -10 (দশমিক) মান সঠিকভাবে সঞ্চয় করতে পারে না। বৈজ্ঞানিক গণনার জন্য ভাসমানগুলি সবচেয়ে উপযুক্ত। এগুলি বেশিরভাগ ব্যবসায়িক ভিত্তিক গণিতের পক্ষে উপযুক্ত নয় এবং ফ্লোটগুলির অনুপযুক্ত ব্যবহার আপনাকে দংশন করবে। বহু দশমিক মান হুবহু বেস -২ তে উপস্থাপন করা যায় না। 0.1উদাহরণস্বরূপ, পারে না এবং তাই আপনি দেখতে পছন্দ করেন এমন অদ্ভুত ফলাফল 1.0 - 0.1 = 0.8999999।
দশমিকগুলি বেস -10 নম্বর সঞ্চয় করে। দশমিক বেশিরভাগ ব্যবসায়িক গণিতের জন্য একটি ভাল ধরণের (তবে কোনও আর্থিকভাবে গণনার জন্য "অন্তর্নির্মিত" অর্থ "প্রকারটি আরও উপযুক্ত) যেখানে মানগুলির পরিসীমা পূর্ণসংখ্যার ধরণের দ্বারা সরবরাহিত, এবং ভগ্নাংশের মানগুলির প্রয়োজন হয়। দশমিকগুলি, যেমন নামটি বোঝা যায়, বেস -10 সংখ্যার জন্য ডিজাইন করা হয়েছে - তারা দশমিক মানগুলি (আবার কোনও নির্দিষ্ট বিন্দুতে) সঠিকভাবে সঞ্চয় করতে পারে।
মাইএসকিউএল সম্প্রতি তাদের ডেসিমাল ধরণের স্টোরটি বদলেছে । অতীতে তারা প্রতিটি সংখ্যার জন্য একটি সংখ্যার - বনাম - একটি দুজনের পরিপূরক পূর্ণসংখ্যার বা এর থেকে প্রাপ্ত কিছু সংখ্যার উপস্থাপনার সমন্বয়ে প্রতিটি অঙ্কের জন্য অক্ষর (বা nybbles) সংরক্ষণ করে।
DECIMAL- র জন্য বর্তমান স্টোরেজ ফর্ম্যাটটি 1,2,3, বা 4-বাইট পূর্ণসংখ্যার একটি সিরিজ, যার বিটগুলি আপনার দ্বারা সংজ্ঞায়িত একটি আবদ্ধ দশমিক বিন্দু দিয়ে একটি দুটি এর পরিপূরক সংখ্যা তৈরি করতে সম্মত হয় এবং আপনি ঘোষণা করার পরে ডিবি স্কিমায় সঞ্চিত থাকে কলামটি উল্লেখ করুন এবং এটি ডেসিমাল আকার এবং দশমিক পয়েন্ট অবস্থান নির্ধারণ করুন।
উদাহরণস্বরূপ, আপনি যদি 32-বিট ইনট নেন তবে আপনি 0 - 4,294,967,295 থেকে যে কোনও সংখ্যা সঞ্চয় করতে পারবেন। এটি কেবল নির্ভরযোগ্যভাবে 999,999,999 কে কভার করবে, সুতরাং আপনি যদি 2 টি বিট ফেলে দেন এবং ব্যবহার করেন (1 << 30 -1) আপনি কিছুই ছেড়ে দিতে চাইবেন না। 4 টি ASCII অক্ষর বা 8 টি ভঙ্গুর সংখ্যা ব্যবহার করে 32 বিটগুলিতে 4 সংখ্যার আওতায় কেবল 4 বাইটের সাহায্যে সমস্ত 9-সংখ্যার সংখ্যা Coverেকে রাখা আরও দক্ষ efficient (একটি নিবিলিটি 4-বিটস, 0-9 এর জন্য প্রয়োজনীয় 0-15 এর চেয়ে বেশি মানগুলিকে মঞ্জুরি দেয় তবে আপনি 3 টি বিটে গিয়ে এই বর্জ্যটি অপসারণ করতে পারবেন না কারণ এটি কেবল 0-7 মানগুলিকেই অন্তর্ভুক্ত করে)
মাইএসকিউএল অনলাইন ডক্সে ব্যবহৃত উদাহরণটি ডেসিমাল (18,9) উদাহরণ হিসাবে ব্যবহার করে। এটি 9 সংখ্যার আগে এবং সূচিত দশমিক বিন্দুর পিছনে 9 ডিজিট, যা উপরে বর্ণিত হিসাবে নিম্নলিখিত স্টোরেজটির প্রয়োজন requires
18 8-বিট চর হিসাবে: 144 বিট
18 4-বিট nybbles হিসাবে: 72 বিট
2 32-বিট পূর্ণসংখ্যার হিসাবে: 64 বিট
বর্তমানে ডেসিমাল সর্বাধিক 65 ডিজিটকে সমর্থন করে, যেমন ডিসিআইএমএল (এম, ডি) যেখানে এম এর জন্য সর্বাধিক মান 65 হয় এবং ডি এর অনুমোদিত বৃহত্তম মান 30 হয়।
একসাথে 9 ডিজিটের অংশগুলির প্রয়োজন না হওয়ার জন্য, 32-বিটের চেয়ে ছোট পূর্ণসংখ্যাগুলি 1,2 এবং 3 বাইট পূর্ণসংখ্যা ব্যবহার করে অঙ্কগুলি যুক্ত করতে ব্যবহৃত হয়। কিছু কারণে যে যুক্তিটিকে অস্বীকার করে, স্বাক্ষর না করে পরিবর্তে স্বাক্ষরযুক্ত ইনট ব্যবহার করা হত এবং এর ফলে 1 বিট ফেলে দেওয়া হয় যার ফলে নিম্নলিখিত স্টোরেজ সক্ষমতা তৈরি হয়। 1,2 এবং 4 বাইট ইনটগুলির জন্য হারানো বিটটি কিছু যায় আসে না, তবে 3-বাইট ইন্টের জন্য এটি একটি দুর্যোগ কারণ পুরো এক অঙ্কটি সেই এক বিটের ক্ষতির কারণে হারিয়ে যায়।
একটি 7-বিট int সহ: 0 - 99
একটি 15-বিট int সহ: 0 - 9,999
একটি 23-বিট ইন্টি সহ: 0 - 999,999 (24 - বিট ইনট সহ 0 - 9,999,999)
1,2,3 এবং 4-বাইট পূর্ণসংখ্যাগুলি একত্রে একটি "বিট পুল" গঠনের জন্য সংশ্লেষিত হয় DECIMAL দুটি সংখ্যার পরিপূরক পূর্ণসংখ্যার হিসাবে সংখ্যার যথাযথভাবে প্রতিনিধিত্ব করতে ব্যবহার করে। দশমিক বিন্দু সংরক্ষণ করা হয় না, এটি নিহিত হয়।
এর অর্থ সিপিইউ একটি সংখ্যা হিসাবে স্বীকৃত কিছুতে "নম্বর" রুপান্তর করার জন্য ডিবি ইঞ্জিনের কোনও রূপান্তর রূপান্তর করতে কোনও এএসসিআইআই প্রয়োজন হয় না। কোনও গোলাকার নয়, কোনও রূপান্তর ত্রুটি নেই, এটি সিপিইউ হেরফের করতে পারে এমন একটি আসল সংখ্যা।
এই ইচ্ছামত বৃহত্তর পূর্ণসংখ্যার গণনা অবশ্যই সফ্টওয়্যারেই করা উচিত, কারণ এই ধরণের সংখ্যার জন্য কোনও হার্ডওয়্যার সমর্থন নেই, তবে এই লাইব্রেরিগুলি অনেক পুরানো এবং উচ্চতর অনুকূলিত হয়েছে, 50 বছর আগে আইবিএম 370 ফোর্টরান স্বেচ্ছাচারিত নির্ভুলতা ভাসমান পয়েন্ট ডেটা সমর্থন করার জন্য লেখা হয়েছিল । তারা সিপিইউ ইন্টিজার হার্ডওয়্যারের সাথে সম্পন্ন স্থির আকারের পূর্ণসংখ্যার বীজগণিতের তুলনায় বা এফপিইউতে ভাসমান পয়েন্ট গণনার তুলনায় এখনও অনেক ধীর।
স্টোরেজ দক্ষতার ক্ষেত্রে, যেহেতু একটি ফ্লোটের সূচক প্রতিটি ফ্লোটের সাথে সংযুক্ত থাকে, স্পষ্টভাবে নির্দিষ্ট করে যে দশমিক বিন্দুটি রয়েছে তা স্পষ্টভাবে উল্লেখ করে, এটি ব্যাপকভাবে অপ্রয়োজনীয়, এবং তাই ডিবি কাজের জন্য অদক্ষ। একটি ডিবিতে আপনি ইতিমধ্যে জানেন যে দশমিক পয়েন্টটি সামনে যেতে হবে এবং ডেসিমাল কলামের মান রয়েছে এমন সারণীতে যে সারি রয়েছে তার দশমিক পয়েন্টটি কোথায় রাখা হবে, সংরক্ষণ করা হবে তার কেবল 1 এবং কেবলমাত্র বিশদটি দেখতে হবে a স্কাইমাতে একটি ডেসিমাল (এম, ডি) এর পক্ষে যুক্তি হিসাবে এম এবং ডি মানগুলিকে বোঝায়।
বিভিন্ন ধরণের অ্যাপ্লিকেশনগুলির জন্য কোন ফর্ম্যাটটি ব্যবহার করতে হবে সে সম্পর্কে এখানে প্রচুর মন্তব্য পাওয়া গেছে, সুতরাং আমি বিন্দুটি বেলবো না। আমি এখানে এটি লেখার জন্য সময় নিলাম কারণ যে কেউ লিঙ্কযুক্ত মাইএসকিউএল অনলাইন ডকুমেন্টেশন বজায় রাখছেন তিনি উপরের কোনওটি বুঝতে পারেন না এবং ক্রমবর্ধমান হতাশাবোধের চক্রের পরেও তাদের কাছে এটি ব্যাখ্যা করার চেষ্টা করেছি আমি ছেড়ে দিয়েছি। তারা কী লিখছেন তা কতটা দুর্বল তা বোঝার একটি ভাল ইঙ্গিতটি হ'ল বিষয়টির খুব ঘোলাটে এবং প্রায় অনির্বচনীয় উপস্থাপনা।
চূড়ান্ত চিন্তা হিসাবে, যদি আপনার উচ্চ-নির্ভুলতা ভাসমান পয়েন্ট গণনার প্রয়োজন হয়, তবে গত 20 বছরে ভাসমান পয়েন্ট কোডে অসাধারণ অগ্রগতি হয়েছে, এবং 96-বিট এবং চতুর্ভুজ প্রিসিকেশন ফ্লোটের জন্য হার্ডওয়্যার সমর্থনটি কোণার ঠিক কাছাকাছি, যদি সেখানে সঞ্চিত মানটির হেরফের গুরুত্বপূর্ণ হয় তবে সেখানে ভাল স্বেচ্ছাচারিত নির্ভুলতা গ্রন্থাগার রয়েছে।
কেবল মাইএসকিউএল-এর সাথে সুনির্দিষ্ট নয়, ভাসা এবং দশমিক প্রকারের মধ্যে পার্থক্য হ'ল তারা ভগ্নাংশের মানগুলি উপস্থাপন করে। ভাসমান পয়েন্টের প্রকারগুলি বাইনারিতে ভগ্নাংশকে উপস্থাপন করে যা কেবল মান হিসাবে উপস্থাপন করতে পারে {m*2^n | m, n Integers}। 1/5 এর মতো মানগুলি যথাযথভাবে উপস্থাপন করা যায় না (রাউন্ড অফ ত্রুটি ব্যতীত)। দশমিক সংখ্যা একইভাবে সীমাবদ্ধ, তবে সংখ্যার মতো প্রতিনিধিত্ব করে {m*10^n | m, n Integers}। দশমিকগুলি এখনও 1/3 এর মতো সংখ্যার প্রতিনিধিত্ব করতে পারে না, তবে প্রায়শই এটি অনেকগুলি সাধারণ ক্ষেত্রে যেমন ফিনান্সের ক্ষেত্রে ঘটে থাকে that যেহেতু দশমিক সংখ্যা $0.20(ডলারের এক পঞ্চম) মতো মানের প্রতিনিধিত্ব করতে পারে , তাই এই পরিস্থিতিতে এটি পছন্দ করা হয়।
দশমিক হ'ল অর্থের মতো স্থির পরিমাণের জন্য যেখানে আপনি নির্দিষ্ট দশমিক দশক স্থান চান। ফ্লোটগুলি স্টোর করার জন্য ... ভাসমান পয়েন্ট যথার্থ নম্বরগুলি।
আমি এটি দরকারী খুঁজে পেয়েছি:
সাধারণত, ভাসমান মানগুলি বৈজ্ঞানিক গণনার জন্য ভাল তবে আর্থিক / আর্থিক মূল্যবোধের জন্য ব্যবহার করা উচিত নয়। বিজনেস ওরিয়েন্টেড ম্যাথের জন্য সর্বদা দশমিক ব্যবহার করুন।
সূত্র: http://code.rohitink.com/2013/06/12/mysql-integer-float-decimal-data-types-differences/
mysql> CREATE TABLE num(id int ,fl float,dc dec(5,2));
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO num VALUES(1,13.75,13.75);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO num VALUES(2,13.15,13.15);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM num WHERE fl = 13.15;
Empty set (0.00 sec)
mysql> SELECT * FROM num WHERE dc = 13.15;
+------+-------+-------+
| id | fl | dc |
+------+-------+-------+
| 2 | 13.15 | 13.15 |
+------+-------+-------+
1 row in set (0.00 sec)
mysql> SELECT SUM(fl) ,SUM(dc) FROM num;
+--------------------+---------+
| SUM(fl) | SUM(dc) |
+--------------------+---------+
| 26.899999618530273 | 26.90 |
+--------------------+---------+
1 row in set (0.00 sec)
mysql> SELECT * FROM num WHERE ABS(fl - 13.15)<0.01;
+------+-------+-------+
| id | fl | dc |
+------+-------+-------+
| 2 | 13.15 | 13.15 |
+------+-------+-------+
1 row in set (0.00 sec)
ভাসমান-পয়েন্টের প্রকারগুলি (আনুমানিক মান) - ফ্লাট, ডাবল
ফ্লোট এবং ডাবল প্রকারগুলি আনুমানিক সংখ্যার ডেটা মানগুলিকে উপস্থাপন করে। মাইএসকিউএল একক নির্ভুলতার মানগুলির জন্য চারটি বাইট এবং ডাবল-যথার্থ মানের জন্য আট বাইট ব্যবহার করে।
ফ্লাটের জন্য, এসকিউএল স্ট্যান্ডার্ড প্যারেন্টেসিসগুলিতে ফ্লোটের মূলশব্দটি অনুসরণ করে বিটগুলিতে যথাযথতার butচ্ছিক স্পেসিফিকেশন (তবে ঘোরের সীমা নয়) এর অনুমতি দেয়। মাইএসকিউএল এই alচ্ছিক নির্ভুলতা স্পেসিফিকেশন সমর্থন করে, কিন্তু যথার্থ মান শুধুমাত্র স্টোরেজ আকার নির্ধারণ করতে ব্যবহৃত হয়। 0 থেকে 23 এর মধ্যে একটি নির্ভুলতা 4-বাইট একক-নির্ভুলতা ফ্লোট কলামে ফল দেয়। 24 থেকে 53 এর মধ্যে একটি স্পষ্টতা 8-বাইট ডাবল-স্পষ্টতা ডাবল কলামে ফলাফল।
মাইএসকিউএল একটি নন-স্ট্যান্ডার্ড সিনট্যাক্সের অনুমতি দেয়: ফ্লাট (এম, ডি) বা রিয়েল (এম, ডি) বা ডাবল প্রিসিশন (এম, ডি)। এখানে, "(এম, ডি)" এর অর্থ মানগুলি মোট এম সংখ্যা পর্যন্ত সংরক্ষণ করতে পারে, যার মধ্যে ডি ডিজিট দশমিক বিন্দুর পরে হতে পারে। উদাহরণস্বরূপ, ফ্লোয়েট হিসাবে সংজ্ঞায়িত একটি কলাম (7,4) প্রদর্শিত হলে -999.9999 এর মতো দেখাবে। মাইএসকিউএল মানগুলি সংরক্ষণের সময় রাউন্ডিং সম্পাদন করে, সুতরাং আপনি যদি 999.00009 ফ্লাট (7,4) কলামে sertোকান তবে আনুমানিক ফলাফল 999.0001 হয়।
যেহেতু ভাসমান-পয়েন্টের মানগুলি আনুমানিক এবং যথাযথ মান হিসাবে সংরক্ষণ করা হয় না, সেগুলি তুলনার ক্ষেত্রে যথাযথ হিসাবে বিবেচনা করার প্রচেষ্টা সমস্যার কারণ হতে পারে। তারা প্ল্যাটফর্ম বা বাস্তবায়ন নির্ভরতা সাপেক্ষে।
সর্বাধিক বহনযোগ্যতার জন্য, আনুমানিক সংখ্যার ডেটা মানগুলির স্টোরেজের প্রয়োজনীয় কোডটির যথাযথতা বা সংখ্যার কোনও স্পেসিফিকেশন ছাড়াই ফ্লোট বা ডাবল প্রীতি ব্যবহার করা উচিত।
https://dev.mysql.com/doc/refman/5.5/en/floating-point-types.html
ভাসমান-পয়েন্ট মান সহ সমস্যা
ভাসমান-পয়েন্ট সংখ্যাগুলি কখনও কখনও বিভ্রান্তির কারণ হয় কারণ এগুলি আনুমানিক এবং সঠিক মান হিসাবে সংরক্ষণ করা হয় না । এসকিউএল স্টেটমেন্টে লিখিত হিসাবে একটি ভাসমান-পয়েন্ট মান অভ্যন্তরীণভাবে উপস্থাপিত মানের মতো নাও হতে পারে। তুলনামূলকভাবে সঠিক হিসাবে ভাসমান-বিন্দু মানের আচরণের প্রচেষ্টা সমস্যার কারণ হতে পারে। তারা প্ল্যাটফর্ম বা বাস্তবায়ন নির্ভরতা সাপেক্ষে। ফ্লোট এবং ডাবল ডেটা ধরণের বিষয়গুলির সাথে সম্পর্কিত to ডেসিমাল কলামগুলির জন্য, মাইএসকিউএল dec৫ দশমিক অঙ্কের যথার্থতার সাথে অপারেশন সম্পাদন করে, যা সর্বাধিক সাধারণ ভুলত্রুটি সমস্যার সমাধান করা উচিত।
ভাসমান-পয়েন্ট অপারেশন ব্যবহার করে গণনাগুলি কীভাবে ভাসমান-পয়েন্ট ত্রুটির সাপেক্ষে তা নিরূপণের জন্য নিম্নলিখিত উদাহরণটি ডাবল ব্যবহার করে।
mysql> CREATE TABLE t1 (i INT, d1 DOUBLE, d2 DOUBLE);
mysql> INSERT INTO t1 VALUES (1, 101.40, 21.40), (1, -80.00, 0.00),
-> (2, 0.00, 0.00), (2, -13.20, 0.00), (2, 59.60, 46.40),
-> (2, 30.40, 30.40), (3, 37.00, 7.40), (3, -29.60, 0.00),
-> (4, 60.00, 15.40), (4, -10.60, 0.00), (4, -34.00, 0.00),
-> (5, 33.00, 0.00), (5, -25.80, 0.00), (5, 0.00, 7.20),
-> (6, 0.00, 0.00), (6, -51.40, 0.00);
mysql> SELECT i, SUM(d1) AS a, SUM(d2) AS b
-> FROM t1 GROUP BY i HAVING a <> b;
+------+-------+------+
| i | a | b |
+------+-------+------+
| 1 | 21.4 | 21.4 |
| 2 | 76.8 | 76.8 |
| 3 | 7.4 | 7.4 |
| 4 | 15.4 | 15.4 |
| 5 | 7.2 | 7.2 |
| 6 | -51.4 | 0 |
+------+-------+------+
ফলাফলটি সঠিক। যদিও প্রথম পাঁচটি রেকর্ড দেখে মনে হচ্ছে তাদের তুলনাটি সন্তুষ্ট করা উচিত নয় (a এবং b এর মানগুলি পৃথক বলে মনে হয় না) তবে তারা এটি করতে পারে কারণ কারণগুলির উপর নির্ভর করে সংখ্যার মধ্যে পার্থক্য দশম দশমিক বা তার বেশি দেখা যায় যেমন কম্পিউটার আর্কিটেকচার বা সংকলক সংস্করণ বা অপ্টিমাইজেশন স্তর। উদাহরণস্বরূপ, বিভিন্ন সিপিইউ ভাসমান-পয়েন্ট সংখ্যাগুলি আলাদাভাবে মূল্যায়ন করতে পারে।
যদি D1 এবং d2 কলামগুলি ডুবলের পরিবর্তে DECIMAL হিসাবে সংজ্ঞায়িত করা হয়, তবে নির্বাচিত ক্যোয়ারির ফলাফলটিতে কেবল একটি সারি থাকবে have উপরের দেখানো সর্বশেষটি।
ভাসমান-পয়েন্ট সংখ্যা তুলনা করার সঠিক উপায়টি হ'ল প্রথমে সংখ্যার মধ্যে পার্থক্যের জন্য একটি গ্রহণযোগ্য সহনশীলতার বিষয়ে সিদ্ধান্ত নেওয়া এবং তারপরে সহনশীলতার মানের তুলনায় তুলনা করা। উদাহরণস্বরূপ, যদি আমরা সম্মত হই যে দশ হাজারের মধ্যে (0.0001) একের যথার্থতার মধ্যে যদি ভাসমান-পয়েন্ট সংখ্যাগুলি একই হয় তবে তা সহনশীলতার মানের চেয়ে বড় পার্থক্য খুঁজতে তুলনাটি লিখতে হবে:
mysql> SELECT i, SUM(d1) AS a, SUM(d2) AS b FROM t1
-> GROUP BY i HAVING ABS(a - b) > 0.0001;
+------+-------+------+
| i | a | b |
+------+-------+------+
| 6 | -51.4 | 0 |
+------+-------+------+
1 row in set (0.00 sec)
বিপরীতভাবে, সারিগুলি পেতে যেখানে সংখ্যাগুলি একই হয়, পরীক্ষার সহনশীলতার মানের মধ্যে পার্থক্য খুঁজে পাওয়া উচিত:
mysql> SELECT i, SUM(d1) AS a, SUM(d2) AS b FROM t1
-> GROUP BY i HAVING ABS(a - b) <= 0.0001;
+------+------+------+
| i | a | b |
+------+------+------+
| 1 | 21.4 | 21.4 |
| 2 | 76.8 | 76.8 |
| 3 | 7.4 | 7.4 |
| 4 | 15.4 | 15.4 |
| 5 | 7.2 | 7.2 |
+------+------+------+
5 rows in set (0.03 sec)
ভাসমান-পয়েন্ট মানগুলি প্ল্যাটফর্ম বা বাস্তবায়ন নির্ভরতার সাপেক্ষে। মনে করুন যে আপনি নিম্নলিখিত বিবৃতিগুলি কার্যকর করেছেন:
CREATE TABLE t1(c1 FLOAT(53,0), c2 FLOAT(53,0));
INSERT INTO t1 VALUES('1e+52','-1e+52');
SELECT * FROM t1;
কিছু প্ল্যাটফর্মে, নির্বাচনী বিবৃতিটি ইনফ এবং ইনফ করে দেয়। অন্যদের উপর, এটি 0 এবং -0 প্রদান করে।
পূর্ববর্তী ইস্যুগুলির একটি নিদর্শনটি হ'ল আপনি যদি মাস্টারের উপরে মাইএসকিल्डম্পের সাথে টেবিলের বিষয়বস্তুগুলি ডাম্প করে এবং ডাম্প ফাইলটি স্লেভটিতে পুনরায় লোড করে একটি প্রতিলিপি স্লেভ তৈরি করার চেষ্টা করেন, তবে ভাসমান-পয়েন্ট কলামগুলিযুক্ত টেবিলগুলি দুটি হোস্টের মধ্যে পৃথক হতে পারে।
https://dev.mysql.com/doc/refman/5.5/en/problems-with-float.html
হার্ড এবং ফাস্ট বিধি
আপনার যা করা দরকার তা হ'ল আপনি যে সংখ্যাগুলি সংরক্ষণ করছেন তার যোগ, বিয়োগ বা গুণন করা, DECIMAL সেরা।
আপনার যদি ডেটাগুলিতে গাণিতিক বা বীজগণিতের অন্য কোনও রূপকে ভাগ করতে বা করতে চান তবে আপনি অবশ্যই অবশ্যই ভাসা ভাসিয়ে সুখী হতে চলেছেন। ফ্লোটিং পয়েন্ট লাইব্রেরিগুলি এবং ইন্টেল প্রসেসরগুলিতে, স্বয়ং ভাসমান পয়েন্ট প্রসেসরের, সাধারণত সাধারণ গণিতের কাজগুলি করার সময় ঘটে যাওয়া ব্যতিক্রমগুলির বরফখণ্ডটি সংশোধন, ফিক্স-আপ, সনাক্ত এবং পরিচালনা করতে প্রচুর পরিমাণে অপারেশন রয়েছে - বিশেষত ট্রান্সেন্ডেন্টাল ফাংশনগুলি।
যথার্থতার জন্য, আমি একবার বাজেট সিস্টেম লিখেছিলাম যা 3,000+ অ্যাকাউন্টের প্রত্যেকটির% অবদানকে সেই ইউনিটের একীকরণ নোডে মাসে 6,000 বাজেট ইউনিটের জন্য গণনা করে, তারপরে শতাংশের (3,000 + x 12 x 3,600) উপর ভিত্তি করে আমি সাংগঠনিক নোডগুলির পরবর্তী 3 স্তরে সর্বোচ্চ সাংগঠনিক নোডগুলি দ্বারা বাজেটের পরিমাণকে গুণিত করেছিলাম এবং তারপরে সমস্ত 3,200 বিশদ ইউনিটের জন্য সমস্ত (3,000 + 12) মান গণনা করি। মিলিয়ন-মিলিয়ন এবং মিলিয়ন মিলিয়ন ডাবল নির্ভুলতা ভাসমান পয়েন্ট গণনা, যার মধ্যে যে কোনও একটি বোতল-আপ একীকরণের মধ্যে pro সমস্ত অনুমানের রোল-আপকে সংগঠনের সর্বোচ্চ স্তরে ফিরিয়ে দেবে।
এই সমস্ত গণনার পরে মোট ভাসমান পয়েন্ট ত্রুটি ছিল শূন্য । এটি 1986 সালে ছিল, এবং ভাসমান পয়েন্ট লাইব্রেরিগুলি আজকের তুলনায় আগের চেয়ে অনেক উন্নত। ইন্টেল এটির মধ্যবর্তী গণনাগুলিকে ৮০ বিট যথার্থে ডাবলগুলি করে, যা গোলাকার ত্রুটিটি বাদ দেয়। যখন কেউ আপনাকে "এটি ভাসমান পয়েন্ট ত্রুটি" বলে দেয় এটি প্রায় নিশ্চিতভাবেই সত্য নয়।
float(এবং double) বাইনারি ভগ্নাংশ উপস্থাপন করে
decimal দশমিক ভগ্নাংশ উপস্থাপন করে
declare @float as float(10)
declare @Decimal as decimal(10)
declare @Inetger as int
set @float =10.7
set @Decimal =10.7
set @Inetger=@Decimal
print @Inetger
পূর্ণসংখ্যার প্রিন্ট 10 এ মান দশমিক 11 এ সেট করলে ভাসমানের মধ্যে
FLOAT(m,n), এটি দুটি বৃত্তাকার দিকে নিয়ে যায়; ইতিমধ্যে, এটি কোনও ব্যবহারের কিছুই সরবরাহ করে না।