The format specifier %a for printf() in C

痴心易碎 提交于 2019-12-17 18:34:27

问题


I am reading a C language book, it said %f, %e, %g, %a were printf chars used for float and double data types. Currently I can understand %f, %e, %g completely.

When do I need use %a to print float and double type data ?

Can you please show me an example.


回答1:


The %a formatting specifier is new in C99. It prints the floating-point number in hexadecimal form. This is not something you would use to present numbers to users, but it's very handy for under-the-hood/technical use cases.

As an example, this code:

printf("pi=%a\n", 3.14);

prints:

pi=0x1.91eb86p+1

The excellent article linked in the comments explains that this should be read "1.91EB8616 * 21" (that is, the p is for power-of-two the floating-point number is raised to). In this case, "1.91EB8616" is "1.570000052452087410". Multiply this by the "21", and you get "3.14000010490417510".

Note that this also has the useful property of preserving all bits of precision, and presenting them in a robust way.




回答2:


As far as an example of why you would want to use the hex representation, you may want to use %a to precisely represent a floating point value being sent to another machine for processing.

We're using this currently for unit testing an embedded controller by sending data from a simulated plant model that is emulating sensors and actuators to the embedded processor via a UART where the embedded processor does it's control processing and returns feedback (again, float represented as %a) back to the plant model to close the loop.



来源:https://stackoverflow.com/questions/4826842/the-format-specifier-a-for-printf-in-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!