Показать сообщение отдельно
Старый 29.10.2004, 14:03   #52  
vasiliy is offline
vasiliy
Программер
 
288 / 17 (1) ++
Регистрация: 21.10.2004
Адрес: E-burg
Цитата:
Изначально опубликовано Alks
Да нет, же, mazzy, речь то о другом.
Ну и пусть вы храните числа в базе в округленном до n знаков после запятой виде.
Это уменьшит число проблем связанных с данным глюком, но ни в коей мере не избавит от них.

Посмотрите на следующий код - числа a и b совершенно целые, НЕ ДРОБНЫЕ И НЕ БОЛЬШИЕ, но ошибка (именно ошибка, а не тривиальная неточность округления в вещественной арифметике) происходит не при сохранении или извлечении из/в базу, а по ходу промежуточных вычислений над совершенно безобидными числами!!!

PHP код:
static void Summ(Args _args)
{
    
real a 1;
    
real b 3;
    
real c b;
    ;
    print 
* (c), " = "c" ?!!!!!";
    
pause;

Вот про то и речь!
(Изначально так и было написано что числа 9999.9999.... получены в результате вычислений, но не извлечены из базы)
Операция деления становится совершенно небезопасной, т.к. может сгенерировать нам периодическую дробь из совершенно нормальных, округленных чисел, которая в свою очередь становится небезопасной при суммировании с другими периодическими дробями!
Это же просто капец какой то.
А вы не используйте промежуточных переменных и все норм будет