#include <stdio.h>
#include <math.h>
int main()
{
char* a = "399999999999999";
char* b = "399999999999998";
float da = atof(a);
float db = atof(b);
printf("da = %f, db = %f\n", da, db); // para ver como se almacenan los numeros
printf("%s - %s = %f\n", a, b, da-db);
a = "500000000000002";
b = "500000000000001";
da = atof(a);
db = atof(b);
printf("da = %f, db = %f\n", da, db);
printf("%s - %s = %f\n", a, b, da-db);
}
----
399999999999999 - 399999999999998 = 0.000000
500000000000002 - 500000000000001 = 0.000000
Автор выразил свою позицию в первом же сообщении. Проблема не в библиотечной функции, проблема в сторонних приложениях неспособных интерпретировать полученный результат. В качестве аргумента оппоненты приводят неправильный результат работы другой программы, но это же не доказывает неправильность самой библиотеки?! Про упомянутый RFC дополню, почитайте приведенный отрывок, правильно в треде сказали, реализация зависит от того как его интерпретировать.
Я своим постом преследовал другую цель — обратить внимание на оригинал диалога, что бы читатель не делал ошибочных выводов. Мог бы адресовать его даже не вам. Вы, в общем, правильно написали.
Таки он создал для 2.6.1, аттач. Но в 2.7 код повторяется, аттач.
К тому, в треде нет единого мнения на счет противоречия RFC. Конкретно, в 25-м посте даются противоположные разъяснения, как итог поста, цитирую:
That is not to say that I don't find this behavior a bit odd. I would love to
hear from Ulrich what problem this functionality was intended to fix, but I
don't believe that this is in any way a violation of spec. It's just a bit
different from the way soe people might interpret it.
Это не значит, что я не нахожу такое поведение немного странным. Я бы хотел услышать от Ульриха, что проблема будет решена. Но я не думаю, что это каким-то образом нарушает спецификацию. Это просто небольшое отличие между тем, как люди могут интерпритировать его (разрешение адреса по спекам).
Вот почему не приняли патч на выпущенную версию - сказать затрудняюсь, но существует n+1 причин для этого. Например - автор уже разрабатывал другой механизм разрешения адресов, кардинально отличающийся от предыдущего и патчить текущий релиз уже небыло смысла, новый на подходе.
Но да, мы мало знаем, и хотябы по этому не стоит бросаться на разработчика, мы же видим, что он работает над проектом.
Пример неудачный, фраза вырвана из контекста. В оригинале звучало:
The FSF has offered Free Software licensing support for many years,
and has a recognized engineering and legal expertise in this area. As
demand and expectation of our service has grown, we have required
additional funds to support our work. To this end we now offer our
services by paid consultation to non-free software developers.
FSF уже долгое время поддерживает лицензирование свободного ПО, является признанным разработчиком и правовым экспертом в этой области. Так как спрос на наши услуги постоянно растет, мы решили взымать дополнительную плату за нашу работу. Для этого мы предлагаем платные консультации разработчиком несвободного ПО.
Вопрос задан от разработчика несвободного ПО. А поскольку Столлман поддерживает свободное ПО, вполне разумно, что консультировать коммерческого разработчика бесплатно он не обязан! Совершенно разумно.
"Dammit, stop opening the bug. It is obvious that you know *NOTHING* about the
issue at hand. Otherwise you would have noticed that this code has been
entirely rewritten in the current code. It uses a very different implementation
which allows to handle this situation differently."
"Проклятье, хватит открывать этот баг. Вы не разбираетесь в вопросе, иначе вы бы заметили, что в текущей версии код полностью переписан. Он использует совершенно другую реализацию которая позволяет разрешить это ситуацию подругому."
Это значит, что автор знает про проблему, но она уже решена в текущей версии кода. Т.е. Stop reopening the bug. If you want explanations pay somebody.
9. LINE FEED.
When the CUR CTL - OFF switch is set to CUR CTL, the code generated by LINE FEED causes the cursor to move non-destructively to the same character position in the line immediately below the current line, and "LF" is transmitted to the computer. When LINE FEED is executed with the cursor on the bottom line, the entire display scrolls upward one line and the cursor remains stationary. When the CUR CTL - OFF switch is set to OFF, all data entry is on the bottom line, LINE FEED causes the entire display to scroll upward one line, leaving the cursor positioned on the new bottom line.
11. RUB.
When the RUB (rubout) key is typed while holding down the SHIFT key, a non-displayable rubout code (ASCII DEL) is transmitted to the computer. The cursor is not advanced and the character code stored in display memory is not overwritten. RUB is normally used to tell the computer that a previous character should be deleted.
12. REPEAT.
When REPEAT is held down while holding a character key, the character (or control function) is repeated at the rate of 12.5 per second. (If the terminal is operating at a baud rate that will not permit 12.5 cps transmission, the repeat rate is reduced to the transmission rate.)
14. HERE IS.
If the Answer Back option is installed, typing this key transmits an identification message (stored in a special ADM-3A memory) that identifies the terminal and alerts the host computer that a message is to follow. If no Answer Back option is installed, the key has no function.
15. BREAK.
This key activates the standard teletypewriter BREAK function, normally used to interrupt an incoming message.
16. CLEAR.
Typing the CLEAR key while holding down the SHIFT key clears the entire screen to spaces. (This function may be disabled by setting the DISABLE - CLR SCRN switch to DISABLE.)
Память расчитать очень просто: представим наиболее разумную ширину сканера (получаем ширину листа), приведем полученную ширину к ближайшему формату (получаем длину листа), перемножаем стороны, получаем площадь листа, умножаем площадь на разрешение матрицы затем на ее цветность, получаем размер сырого дампа.
По моим расчетам, максимальная длина сканера не более 30 см (A3, 11.7 х 16.5 дюймов), разрешение 300 пиксель\дюйм, цветность 16 бит\пиксель = 11,7 х 16,5 х 300 x 300 х 16 = 277992000 бит =~ 33 МБ
На счет ОС реального времени - спорный вопрос, зависит от задач коробки в целом :)
Часть 2 cp, mv, rm, mkdir?
Часть 3 ln, touch, df?!
Часть 4 chown, chmod, chroot??!
Одно радует, find, grep, awk будут, скорее всего, уже завтра. Поймите мой сарказм правильно :(
Воркэраунд по теме топика от MS: The logon screen turns black after you press CTRL+ALT+DELETE to log on to a Microsoft Windows Server 2003-based computer
Но диалог, действительно рассмешил, такой тонкий юмор :)
К тому, в треде нет единого мнения на счет противоречия RFC. Конкретно, в 25-м посте даются противоположные разъяснения, как итог поста, цитирую:
Но да, мы мало знаем, и хотябы по этому не стоит бросаться на разработчика, мы же видим, что он работает над проектом.
Вопрос задан от разработчика несвободного ПО. А поскольку Столлман поддерживает свободное ПО, вполне разумно, что консультировать коммерческого разработчика бесплатно он не обязан! Совершенно разумно.
Читайте оригинал коллеги:
Это значит, что автор знает про проблему, но она уже решена в текущей версии кода. Т.е. Stop reopening the bug. If you want explanations pay somebody.
По моим расчетам, максимальная длина сканера не более 30 см (A3, 11.7 х 16.5 дюймов), разрешение 300 пиксель\дюйм, цветность 16 бит\пиксель = 11,7 х 16,5 х 300 x 300 х 16 = 277992000 бит =~ 33 МБ
На счет ОС реального времени - спорный вопрос, зависит от задач коробки в целом :)