Это ошибка в lldb
. Если вы попробуете то же самое в gdb
, все будет работать правильно. Я подозреваю, что lldb
передает только младшие 32 бита аргумента. Представление IEEE 0.01 и числа, которое он печатает, таково:
47ae147b3778df69 = 19991592471028323832250853378750414848.00
3f847ae147ae147b = 0.01
Обратите внимание, что младшие 32 бита 0,01 совпадают со старшими 32 битами другого числа.
Ошибка также возникает с printf
:
(lldb) expr (void)printf("%.1f\n", 0.01)
19991592257096858016910903319197646848.0
<no result>
Этого не происходит с +[NSNumber numberWithDouble:]
:
(lldb) po [NSNumber numberWithDouble:0.01]
(id) $3 = 0x0fe81390 0.01
Поэтому я подозреваю, что ошибка связана с обработкой lldb
функций с переменным числом аргументов.
Вы можете открыть отчет об ошибке на багзилле LLVM и/или на Отчет об ошибках Apple (он же rdar).
person
rob mayoff
schedule
07.07.2012