• Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.

warning при компајлирање

  • Ја почнал/а темата
  • #1

StMartin

Баниран/a
24 февруари 2008
172
3
Значи кога компајлирав ми се појави warning:
Код:
 warning C4244: '=' : conversion from 'double' to 'float', possible loss of data
Еве го програмот:

Код:
#include <stdio.h>
/* print Fahrenheit-Celsius table
for fahr = 0, 20, ..., 300; floating-point version */
main(void)
{
int fahr;
float celsius;
int lower, upper, step;
lower = -100; /* lower limit of temperatuire scale */
upper = 300; /* upper limit */
step = 20; /* step size */
fahr = lower;
while (fahr <= upper) {
celsius = (5.0/9.0) * (fahr-32.0);
printf("%5.0d %6.1f\n", fahr, celsius);
fahr = fahr + step;
}
return 0;
}
}
Користам Visual Studio C++ компајлер. Не ми е јасно како препознава дека во celsius = (5.0/9.0) * (fahr-32.0); користам double, а горе ми е дефиниран celsius како float?
 

Eva Molotow

Intern
14 април 2008
106
30
Додади f на крај, како 5.0f, така би требало да ги препознава како float.
 
  • Ја почнал/а темата
  • #3

StMartin

Баниран/a
24 февруари 2008
172
3
Не сфаќам. Ако горе, кога ги дефинирам променливите ставам
double celsius; си работи, само не ми е јасно како препозна дека е double?
 

Blagojce

Gaining Experience
26 декември 2007
890
70
Прилеп
Blagojce's setup  
Processor & Cooler
Intel Core i5-3570 3.40GHz
Storage
2 TB
RAM
8 GB
Monitor
ASUS 24" LED Full HD
OS
Windows 10
Јас како што гледам ти се има јавено грешка дека на може да се претвори од double во float бидејќи double има поголем опсег.
Можеби грешам???
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
fahr ти е int, зошто од него одземаш float?
После можеш celsius да го направиш double. Ако толку ти се штеди меморија направи вака:

celsius = (float)((5/9) * (fahr-32));
 
  • Ја почнал/а темата
  • #6

StMartin

Баниран/a
24 февруари 2008
172
3
Не во ред е, ме чуди како препозна дека претворам од float во double? Како разликува float од double?
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
Кога вршиш некоја аритметичка операција во која користиш и децимални броеви или резултатот е децимален број, C++ компајлерот ја дава како double бидејќи double има поголем опсег и со тоа и поточен резултат. Ова предупредување ти излегува како резултат на твојот случај, при делење на два броја се добива децимален резултат, значи double и ти тој резултат сакаш да го ставиш во float.
 
  • Ја почнал/а темата
  • #8

StMartin

Баниран/a
24 февруари 2008
172
3
Да, меѓутоа децималниот резултат, важи и за float, само што double е со двојна прецизност. А кога вика "you may experience loss of data", тоа значи дека можно е дека ќе ми се избришат податоците, или како?
 

dime

Intern
13 мај 2008
163
3
Па така некако, ќе ти бидат помалку прецизни :)
Значи ако имаш зачувано 2^50 у long и ти го кастуваш у int кој собира до 2^31, ќе загубиш нешо оти 2^50 > 2^31..
 

loris

Gaining Experience
7 мај 2007
626
51
Велес - Скопје
Ова не е ништо страшно доколку не внесуваш ептен големи броеви од рангот на 2^(50), сепак ова ти е само предупредување не е грешка, програмата ќе ти ја компајлира и со ова предупредување.
Доколку би внесувал големи броеви тие ќе бидат пократни во децималниот дел, што не би требало да има многу големо влијание на целиот дел од бројот.
Тоа ќе ти дојде како за пи 3.14 или долг формат 3.14159265358979323846… што нема да смени ништо радикално.
Поздрав.
 

Нови мислења

Последни Теми

Статистика

Теми
43,546
Мислења
822,986
Членови
28,057
Најнов член
Iamdantes10
На врв Дно