LINUX.ORG.RU
google interval arithmetics
anonymous
()
Ответ на: комментарий от anonymous
>но тогда int( 0.5 + (0.8 * 1000) / 10 ) -----> 81

??

$ php -r 'echo intval( 0.5 + (0.8 * 1000) / 10 );'
80

ибо:

int(0.5 + 80.001) -> int(80.501) -> 80

int(0.5 + 79.999) -> int(80.499) -> 80
KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous
Проблемы исключительно кривого C++ В нормальных языках приведение типов в таком случае производится округлением. А грамотные программисты стараются на C++ не писать
anonymous
()
Ответ на: комментарий от anonymous
>В нормальных языках приведение типов в таком случае производится округлением.

Это в каких таких языках? Можно список в студию? :)
KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous
Это ответ на первое сообщение, автору.
anonymous
()
Ответ на: комментарий от anonymous
>Начиная с цешарп и жабы.

public class round
{
    public static void main(String... args).
    {
        double x = 80.9999;
        int y = (int)x;
        System.out.println(y);
    }
}

$ java round
80

using System;

public class round {
    public static void Main() {
        double x = 80.99999;
        int y = (int)x;
        Console.WriteLine(y);
    }
}

$ mono round.exe 
80


Ещё варианты? :)
KRoN73 ★★★★★
()
Python 2.5.2 (r252:60911, Jan  4 2009, 17:40:26)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> (0.7 * 1000) / 10
70.0
>>> int( (0.7 * 1000) / 10)
70
anonymous
()
Ответ на: комментарий от KRoN73
Что варианты? У всех нормальных(и даже не совсем нормальных, вроде PHP) высокоуровневых языков, в которых присутствует каст флоат в интежер, кроме тех, кто спиздил синтаксис(и немного семантики) у Си.

Или вы, может, посмеете утверждать что С++, Додиез или Жабка являются нормальными ЯП?

anonymous
()
Ответ на: комментарий от anonymous
>Что варианты?

Варианты нормальных языков, где кастинг double/float в int осуществляется с округлением.

Пока прозвучали _только_ Java и C#. В них, как и в любом другом известном мне языке, дробная часть просто отбрасывается без округления.

Вот я и спрашиваю, ещё варианты языков есть? Нормальных/ненормальных, но где double -> int будет автоматически округлять :)

>и даже не совсем нормальных, вроде PHP

У PHP, как и у других языков известных мне при кастинге в int дробная часть отбрасывается:

$ php -r 'echo (int)80.999999;'
80

>Или вы, может, посмеете утверждать что С++, Додиез или Жабка являются нормальными ЯП?

Так в каких же "нормальных ЯП" есть округление при кастинге? :)
KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73
> Варианты нормальных языков, где кастинг double/float в int осуществляется с округлением.
В релейке округляется ;)
UVV ★★★★★
()
Ответ на: комментарий от anonymous
>это понятно, но тогда int( 0.5 + (0.8 * 1000) / 10 ) -----> 81

компилятор, процессор?

$ cat float_round.cpp
#include <cstdlib>
#include <iostream>

int main()
{
std::cout << int( 0.5 + (0.8 * 1000) / 10 ) << std::endl;
return EXIT_SUCCESS;
}

$ g++ -Wall float_round.cpp -o float_round && ./float_round
80
fghj ★★★★★
()
Ответ на: комментарий от fghj
> $ g++ -Wall float_round.cpp -o float_round && ./float_round

а теперь дизассемблируй бинарь и посмотри что там тебе компилятор наоптимизировал.

anonymous
()
Ответ на: комментарий от anonymous
>а теперь дизассемблируй бинарь и посмотри что там тебе компилятор >наоптимизировал.

добавил volatile, все равно 80.

>cat float_round.cpp

#include <cstdlib>
#include <iostream>

int main()
{
volatile double x = 0.8;

std::cout << int( 0.5 + (x * 1000) / 10 ) << std::endl;
return EXIT_SUCCESS;
}
fghj ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.