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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.