草庐IT

double-double-arithmetic

全部标签

c++ - int->double->int 是否保证保值?

如果我有int,将其转换为double,然后将double转换回int,我能保证获得与开始时相同的值(value)吗?换句话说,给定这个函数:intpassThroughDouble(intinput){doubled=input;returnd;}我是否保证passThroughDouble(x)==x对于所有intsx? 最佳答案 不,不是。该标准没有说明int和double的相对大小。如果int是64位整数并且double是标准IEEEdouble,那么对于大于2^53的数字,它已经失败了.也就是说,int在今天的大多数环境中

存储Double vs int->查询时间和摄取时间

我有一个数字类型的列。我不确定是整数还是小数号。这里有两个选择:无论是整体还是十进制,我都可以将数字存储为两倍。如果是小数,则可以推断该类型并将数字存储为双重,如果是小数或int。然后,我的问题是,将其存储成双重要简单得多(因为int可以将其表示为“5.0”),因此,如果将某些东西存储为doublevsaint,则摄入时间和查询时间有什么区别。错误地将INT的类型存储为双重的类型是如何“昂贵”的?看答案根据BigQuery定价桌,整数和浮点数都使用8个字节,因此实际成本将相同。这BigQuery浮点类型是64位。(我相信双,浮动和float64是同义词,基于其余文档)

c++ - 了解 double 到 int64_t 的转换

所以我有两个函数,一个只是从double转换为int64_t,另一个调用std::round:std::int64_tmy_cast(doubled){autot=static_cast(d);returnt;}std::int64_tmy_round(doubled){autot=std::round(d);returnt;}它们工作正常:cast(3.64)=3和round(3.64)=4。但是,当我查看程序集时,他们似乎在做同样的事情。所以想知道他们如何得到不同的结果?$g++-std=c++1y-c-O3./round.cpp-o./round.o$objdump-dS./ro

c++ - 英特尔 AVX : 256-bits version of dot product for double precision floating point variables

英特尔高级vector扩展(AVX)在256位版本(YMM寄存器)中不为double浮点变量提供点积。“为什么?”这个问题在另一个论坛(here)和StackOverflow(here)上得到了非常简短的处理。但我面临的问题是如何以有效的方式用其他AVX指令替换这条缺失的指令?256位版本中的点积适用于单精度浮点变量(referencehere):__m256_mm256_dp_ps(__m256m1,__m256m2,constintmask);我们的想法是为这个缺失的指令找到一个有效的等价物:__m256d_mm256_dp_pd(__m256dm1,__m256dm2,const

c++ - 为什么 printf() 将 float 提升为 double ?

来自上一个question:Ifyouattempttopassafloattoprintf,it'llbepromotedtodoublebeforeprintfreceivesitprintf()是可变参数函数吗?那么可变参数函数是否在传递float参数之前将其提升为double? 最佳答案 是的,可变参数函数的浮点参数被提升为double。draftC99standard6.5.2.2部分函数调用说:[...]andargumentsthathavetypefloatarepromotedtodouble.Theseareca

c++ - float 和 double 的快速乘法/除法 (C/C++)

在我正在编写的软件中,我正在对我的值进行数百万次乘法或除以2(或2的幂)。我真的希望这些值为int这样我就可以访问位移运算符inta=1;intb=a但是,我不能,我必须坚持double。我的问题是:由于有标准的double表示(符号、指数、尾数),有没有办法使用指数来获得2的幂的快速乘法/除法?我什至可以假设位数将是固定的(该软件将在始终具有64位长double的机器上运行)P.S:是的,算法大多只做这些操作。这是瓶颈(它已经是多线程的了)。编辑:还是我完全弄错了,聪明的编译器已经为我优化了?临时结果(用Qt来测量时间,矫枉过正,但我​​不在乎):#include#include#i

c++ - 在 C++ 中以高性能将 double 转换为 char*

我的应用程序需要将double值转换为char*以写入仅接受字符的管道。执行此操作的常用方法是使用sprintf()函数或使用iomanip.h头文件中的ostringstream。事实证明,这两者的表现都非常糟糕。而且我的应用程序需要经常进行这种转换,以至于它成为主要的瓶颈。还有其他功能可以使用吗?我可以使用什么逻辑来编写高效的转换函数?到目前为止,我唯一能想到的就是使用除法和mod操作来获取每个单独的数字,并将这些数字附加到char*以获得整个double值。不过,这似乎不是一个好方法,而且本身的性能可能会很差。提前感谢您的想法。编辑:关于如何使用char*存在一些混淆。char*

c++ - 如何 'cout' double 值的正确小数位数?

我需要帮助来保持double的精度。如果我将文字分配给double,则实际值会被截断。intmain(){doublex=7.40200133400;std::cout对于上面的代码片段,输出是7.402有没有办法防止这种类型的截断?或者有没有办法准确计算double的float?例如,number_of_decimal(x)会给出11,因为输入在运行时是未知的,所以我不能使用setprecision()。我想我应该把我的问题改成:如何在不截断float的情况下将double转换为字符串。即#include#include#includetemplatestd::stringtype_

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 2 column 1

最近用postman调用接口时候报错json.decoder.JSONDecodeError:Expectingpropertynameenclosedindoublequotes:line2column1(char3)如下图所示:原因:这个json是从微信复制过来粘贴到postman上的,微信粘贴过来的不是标准的json格式解决这个问题最简单的方式是,点击下postman右边的beautify,重新测试okdeftest(request):ifrequest.method=="POST":ifre.search(r"application/json",request.environ.get(

c++ - 将double转换为字符串C++?

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:HowdoIconvertadoubleintoastringinC++?我想组合一个字符串和一个double,而g++抛出这个错误:main.cpp:在函数“intmain()”中:main.cpp:40:错误:“constchar[2]”和“double”类型的无效操作数到二进制“operator+”这是引发错误的代码行:storedCorrect[count]="("+c1+","+c2+")";storedCorrect[]是一个字符串数组,c1和c2都是double。有没有办法将c1和c2转换为字符