ફ્લોટ અને ડબલ વચ્ચે તફાવત - હું કયો એકનો ઉપયોગ કરું?

Anonim

(નોંધ: આ લેખ ધારે છે કે વાચકો કમ્પ્યુટર સાયન્સના બેઝિક્સ વિશે જાણે છે)

ઘણા નવા પ્રોગ્રામરો / વિદ્યાર્થીઓ કે જેમને કમ્પ્યુટર સાયન્સમાં પ્રવેશ મળે છે તેઓ વારંવાર પૂછાતા પ્રશ્નો પૂછે છે કે જે તેઓ કોમ્પ્યુટર સાયન્સની અંદર અભ્યાસ કરે છે જે તેઓ અભ્યાસ કરે છે. સૌથી વધુ શિખાઉ માણસ અભ્યાસક્રમો નંબર સિસ્ટમના વિષયો સાથે શરૂ થાય છે જેનો ઉપયોગ દ્વિઅંકી , દશાંશ , ઓક્ટલ અને હેક્સડેસિમલ < સિસ્ટમ આ કમ્પ્યૂટર નંબર ફોર્મેટ છે જે કમ્પ્યુટર્સ (અથવા કેલ્ક્યુલેટર અને અન્ય કોઇ પણ પ્રકારની ડિજિટલ કમ્પ્યુટર્સ) માં આંકડાકીય મૂલ્યોનું આંતરિક રજૂઆત છે. આ મૂલ્યો "બિટ્સનો સમૂહ" તરીકે સંગ્રહિત છે.

જેમ આપણે જાણીએ છીએ કે કમ્પ્યુટર્સ દ્વિસંગી અંકોનાં સેટોમાં માહિતી દર્શાવે છે (દાખલા તરીકે,

1s અને 0 સે ના સંયોજનમાં, જેમ કે, 1111 દશાંશ પદ્ધતિમાં 15 પ્રતિનિધિત્વ કરે છે), તે મૂલ્યોની ગતિશીલ શ્રેણીને પ્રસ્તુત કરવા માટે ઉપયોગમાં લેવાયેલા જુદા જુદા નંબર ફોર્મેટ વિશે શીખવવા માટે અર્થપૂર્ણ છે, કારણ કે તેઓ ગણતરી / સંખ્યા પ્રક્રિયાના મૂળભૂત બ્લોકો બનાવે છે કોઈપણ પ્રકારની કામગીરીમાં એકવાર વર્ગખંડ (સંખ્યામાં નબળી રીતે) માં સંખ્યા પદ્ધતિ વ્યાખ્યાયિત થઈ જાય, વિદ્યાર્થીઓ એક જ પ્રકાર (આઇ,., ફ્લોટિંગ-પોઇન્ટ અંકગણિત ) ની અંદર જુદા નંબરના ફોર્મેટમાં આગળ વધવા લલચાવે છે, જે ચોક્કસ ચોકસાઇ અને સંખ્યા રેન્જ ધરાવે છે. આમ, ચોક્કસ પ્રકારના વચ્ચે નોન્સિસ શીખવા માટે તેમને ફરજ પાડવામાં આવે છે. બે સૌથી સામાન્ય રીતે ઉપયોગમાં લેવાતા ડેટા પ્રકારો ફ્લોટ અને ડબલ છે, અને જ્યારે તેઓ સમાન જરૂરિયાતો (એટલે ​​કે, ફ્લોટિંગ-પોઇન્ટ અંકગણિત ) ને લક્ષ્ય રાખે છે, ત્યાં કાર્યક્રમમાં ગણતરીમાં તેમના આંતરિક પ્રતિનિધિત્વ અને એકંદર અસરમાં કેટલાક તફાવત. તે કમનસીબ છે કે ઘણાં પ્રોગ્રામર્સ ફ્લેટ અને ડબલ ડેટા પ્રકારો વચ્ચેની ઘોંઘાટને ચૂકી જાય છે, અને તેમને સ્થાનોનો દુરુપયોગ કરવાનું સમાપ્ત કરે છે જ્યાં તેમને પ્રથમ સ્થાન ન વાપરવું જોઈએ. છેવટે કાર્યક્રમના અન્ય ભાગોમાં ખોટી ગણતરી થાય છે.

આ લેખમાં, હું તમને ફ્લોટ વચ્ચેનો તફાવત અને સી પ્રોગ્રામિંગ લેંગ્વેજમાં કોડના ઉદાહરણો સાથે ડબલ કહી રહ્યો છું. ચાલો, શરુ કરીએ!

ફ્લોટ વિ ડબલ … આ સોદો શું છે?

ફ્લોટ અને ડબલ એ ડેટાનું પ્રતિનિધિત્વ છે જે ફૉટિંગ-પોઇન્ટ એરિથમેટિક ઓપરેશન્સ માટે ઉપયોગમાં લેવાય છે, ગણિતના વર્ગમાં તમે ગણતરી કરો છો તે દશાંશ સંખ્યાઓ, જેમ કે,

20 123

, 16 23 , 10. 2 , વગેરે, તેઓ સંપૂર્ણ સંખ્યાઓ નથી (એટલે ​​કે, 2 , 5 , 15 , વગેરે.), આમ તેઓ પર વિચારણા કરવાની જરૂર છે બાઈનરીમાં અપૂર્ણાંકો પરિણામે દશાંશ સંખ્યા (I, E, 20 123 , 16.23 , વગેરે.) ને સામાન્ય બાઈનરી સ્વરૂપ (આઇઆઇ, પૂર્ણાંક) સાથે સરળતાથી રજૂ કરી શકાતું નથી. ફ્લોટ અને ડબલ વચ્ચેનું મુખ્ય તફાવત એ છે કે ભૂતપૂર્વ એક ચોકસાઇ (32-બીટ) ફ્લોટિંગ બિંદુ ડેટા છે, જ્યારે બાદમાં ડબલ ચોકસાઇ (64-બીટ) ફ્લોટિંગ બિંદુ ડેટા પ્રકાર છે. ડબલને "ડબલ" કહેવામાં આવે છે કારણ કે તે મૂળભૂત રીતે ફ્લોટની ડબલ ચોકસાઇ સંસ્કરણ છે. જો તમે એક વિશાળ જથ્થાની ગણતરી કરી રહ્યા છો (સંખ્યામાં 0 ની સંખ્યાને ધ્યાનમાં લો), તો પછી અચોકસાઇઓ ડબલમાં હશે અને તમે ખૂબ ચોકસાઇ ગુમાવશો નહીં.

કોડના ઉદાહરણોનો ઉપયોગ કરીને વિસ્તૃત કરવાનું વધુ સારું છે. નીચે મુજબ છે ફ્લોટ પર કામગીરી અને સી ભાષામાં પ્રદાન કરેલ ગણિતના કાર્યો દ્વારા ડબલ:

# સમાવેશ થાય છે

ઇન્ટ મુખ્ય () {

ફ્લોટ નંબર 1 = 1. એફ / 82;

ફ્લોટ num2 = 0;

માટે (પૂર્ણાંક I = 0; i <738; ++ i)

num2 + = num1;

printf ("%.7g n", num2);

ડબલ સંખ્યા 3 = 1. 0/82;

ડબલ num4 = 0;

માટે (પૂર્ણાંક I = 0; i <738; ++ i)

num4 + = num3;

પ્રિન્ટફ ("% 15g n", num4);

વિચાર ();

}

તે નીચે છાપે છે:

9 000031

8 99999999999983

અહીં, તમે જોઈ શકો છો કે ફ્લોટ અને ડબલની ચોકસાઇમાં થોડો તફાવત અલગ રીતે એક અલગ જવાબ આપે છે, જોકે ડબલ ફ્લોટ કરતાં વધુ સચોટ લાગે છે.

નીચેનામાં સક્યુટ () કાર્યનું ઉદાહરણ C:

# સમાવેશ થાય છે

# સમાવેશ થાય છે

ઇન્ટ મુખ્ય () {

ફ્લોટ નંબર 1 = sqrt (2382719676512365. 1230112312312312));

ડબલ સંખ્યા 2 = sqrt (2382719676512365. 1230112312312312);

printf ("% f n", num1);

printf ("% f n", num2);

વિચાર ();

}

તે નીચેનું આઉટપુટ આપે છે:

48813108 000000

48813109 678778

અહીં, તમે જોઈ શકો છો કે ડબલમાં જવાબ વધુ સારું ચોકસાઇ છે.

બધુ જ, ફૉટિંગ-બિંદુ અંકગણિત માટે ડબલનો ઉપયોગ કરવાનું વધુ સારું છે, કારણ કે C માં ઘણા પ્રમાણભૂત ગણિત કાર્યો ડબલ પર ચાલે છે અને આધુનિક કમ્પ્યુટર્સ અત્યંત ઝડપી અને કાર્યક્ષમ છે ડબલ ફ્લોટિંગ-બિંદુ ગણતરીઓ માટે. આ ફ્લોટનો ઉપયોગ કરવાની જરૂરિયાત ઘટાડવા તરફ દોરી જાય છે, જ્યાં સુધી તમારે ફ્લોટિંગ-બિંદુ નંબરો (નંબરોમાં હજારોની સંખ્યા સાથે મોટા એરેને લાગે છે) પર કામ કરવાની જરૂર હોય અથવા તમે સિસ્ટમ પર કામ કરી રહ્યા છો જે ડબલ- ચોકસાઇ ફ્લોટિંગ બિંદુ, જેમ કે ઘણા GPU, ઓછી સંચાલિત ઉપકરણો અને ચોક્કસ પ્લેટફોર્મ્સ (એઆરએમ કોર્ટેક્સ-એમ 2, કોર્ટેક્સ-એમ 4, વગેરે.) હજુ સુધી ડબલ સપોર્ટ કરતું નથી, તો પછી તમારે ફ્લોટનો ઉપયોગ કરવો જોઈએ. વધુમાં, યાદ રાખવું એક બાબત એ છે કે અમુક જીપીયુ / સીપીયુ વાતાવરણ / મેટ્રીક્સની ગણતરીની જેમ ફ્લોટ પ્રોસેસિંગમાં વધુ સારી / કાર્યક્ષમ છે, તેથી તમને હાર્ડવેર સ્પેસિફિકેશન મેન્યુઅલ / ડોક્યુમેન્ટમાં જોવાની જરૂર પડી શકે છે. ચોક્કસ મશીન માટે.

આધુનિક કમ્પ્યુટર્સને ટાર્ગેટ કરવાના કોડમાં ડબલની જગ્યાએ ફ્લોટનો ઉપયોગ કરવાના ભાગ્યે જ કોઈ કારણ નથી. ડબલમાં વધારાની ચોકસાઇ ઘટાડે છે, પરંતુ તે પૂર્ણ થતી નથી, ગોળાકાર ભૂલો અથવા અન્ય અશુદ્ધિની તક જે કાર્યક્રમના અન્ય ભાગોમાં સમસ્યા ઊભી કરી શકે છે. ઘણા ગણિત કાર્યો અથવા ઑપરેટર્સ ડબલમાં રૂપાંતરિત કરે છે અને પરત કરે છે, તેથી તમારે નંબરોને ફૉટૉટ પર પાછા મૂકવાની જરૂર નથી, કારણ કે તે ચોકસાઇ ગુમાવી શકે છે.ફ્લોટિંગ-પોઇન્ટ એરિથમેટિક પર વિગતવાર વિશ્લેષણ માટે, હું તમને આ અદ્ભુત લેખ વાંચવા ભલામણ કરીએ છીએ (// docs. Oracle. Com / cd / E19957-01 / 806-3568 / ncg_goldberg. Html).

સારાંશ

તેથી … ટૂંકમાં:

સ્થાનો જ્યાં તમારે ફ્લોટનો ઉપયોગ કરવો જોઈએ:

જો તમે હાર્ડવેરને લક્ષ્ય કરતા હોવ જ્યાં સિંગલ-સ્પેસિશન ડબલ-સ્પેસિશન કરતા ઝડપી છે.

તમારી એપ્લિકેશન ફ્લોટિંગ-પોઇન્ટ અંકગણિતનો ભારે ઉપયોગ કરે છે, જેમ કે હજ્જારો 0 ની સંખ્યા સાથે હજારો સંખ્યા

  • તમે ખૂબ નીચા-સ્તરની ઑપ્ટિમાઇઝેશન કરી રહ્યાં છો દાખલા તરીકે, તમે વિશિષ્ટ CPU સૂચનો (i., એસએસઇ, SSE2, AVX, વગેરે) નો ઉપયોગ કરી રહ્યા છો જે એક સમયે બહુવિધ સંખ્યાઓ / એરેઝ / વેક્ટર્સ પર કામ કરે છે.
  • ઉપસંહાર
આ લેખમાં મેં ફ્લોટ અને ડબલ વચ્ચેનો તફાવત પ્રકાશિત કર્યો છે, અને જેનો ઉપયોગ ચોક્કસ સ્થળોએ કરવો જોઈએ. અલબત્ત, મોટાભાગના સ્થળોમાં ડબલને વધુને વધુ આંખે વાપરવા માટે સારું છે, ખાસ કરીને જો તમે આધુનિક કમ્પ્યુટર્સને લક્ષ્યાંક બનાવતા હોવ, કારણ કે ડબલ ફ્લોટિંગ-પોઇન્ટ અંકગણિતના ઉપયોગથી ઓછી કાર્યક્ષમતાની શક્યતા અત્યંત અશક્ય છે. જો તમારી પાસે કોઈ પ્રશ્નો હોય, તો તમે નીચેની ટિપ્પણી વિભાગમાં પૂછી શકો છો!