Показать сообщение отдельно
Старый 17.10.2004, 09:47   #48  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Да нет, же, 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.... получены в результате вычислений, но не извлечены из базы)
Операция деления становится совершенно небезопасной, т.к. может сгенерировать нам периодическую дробь из совершенно нормальных, округленных чисел, которая в свою очередь становится небезопасной при суммировании с другими периодическими дробями!
Это же просто капец какой то.