我正在加密用户的输入以生成密码字符串.但是一行代码在不同版本的框架中给出了不同的结果.用户按下的键值的部分代码:
按下键:1.变量ascii为49.经过一些计算后,'e'和'n'的值:
e = 103,
n = 143,
Math.Pow(ascii, e) % n
Run Code Online (Sandbox Code Playgroud)
上述代码的结果:
在.NET 3.5(C#)中
Math.Pow(ascii, e) % n
Run Code Online (Sandbox Code Playgroud)
给9.0.
在.NET 4(C#)中
Math.Pow(ascii, e) % n
Run Code Online (Sandbox Code Playgroud)
给77.0.
Math.Pow() 在两个版本中给出正确(相同)的结果.
原因是什么,是否有解决方案?
我正在编写一个只支持32位单精度浮点运算的嵌入式硬件程序.但是,我实现的算法需要64位双精度加法和比较.我试图double使用两个元组的模块来模拟数据类型float.因此,a double d将被模拟为struct包含元组:(float d.hi, float d.low).
使用字典顺序进行比较应该是直截了当的.然而,添加有点棘手,因为我不确定应该使用哪个基数.应该是FLT_MAX吗?我怎样才能检测到携带?
如何才能做到这一点?
编辑(清晰度):我需要额外的有效数字而不是额外的范围.
SSE/AVX寄存器可以被视为整数或浮点BigNums.也就是说,人们可以忽视存在通道.是否有一种简单的方法可以利用这种观点并将这些寄存器单独或组合用作BigNum?我问,因为我从BigNum库中看到的很少,它们几乎普遍存储并对数组进行算术运算,而不是SSE/AVX寄存器.可移植性?
例:
假设您将SSE寄存器的内容存储为a中的键std::set,您可以将这些内容作为BigNum进行比较.
具体来说,我谈论的是x87 PC架构和C编译器。
我正在编写自己的解释器,double数据类型背后的推理使我感到困惑。特别是在效率方面。有人可以解释为什么C选择了64位double而不是硬件本机80位double吗?又为什么硬件没有设置在80位double上呢?每种性能都有什么影响?我想使用80位double作为默认数字类型。但是编译器开发人员的选择让我担心这不是最佳选择。
double在x86上仅短2个字节,为什么编译器long double默认不使用10个字节?long doublevs所带来的额外精度的例子double吗?long double 默认情况下禁用它?long double典型的x86 / x64 PC硬件的差/慢多少?下列文件和两双算法的源代码有一段时间了,我仍然无法找出究竟是如何一个dd_real(定义为struct dd_real { double x[2];...}数量)分成两个双打.假如我用字符串初始化它,dd_real pi = "3.14159265358979323846264338327950";会是什么pi.x[0]和pi.xi[1]?我需要理解它,然后编写一个希望小的Python函数来完成它.
我不只是想调用QD库的原因是我更喜欢在Python中重新实现正确的分割,以便我发送我的35位精度常量(以字符串形式给出),就像double2CUDA代码一样.被GQD库视为双重实物 - 似乎是唯一一个处理CUDA中扩展精度计算的库.不幸的是,在Python方面也排除了mpmath.
如何在cpp中打印小数点后特定数量的数字?
同样,如果我想在将 22 除以 7 的同时打印小数点后 30 位以上的数字,那么我该怎么做?请!
我已经在Wikipedia中看到,某种程度上实现四精度的方法是使用双精度双精度算术,即使就位而言它的精度不完全相同:https : //en.wikipedia.org/wiki/Quadruple-precision_floating-point_format
在这种情况下,我们使用两个double来存储值。因此,我们进行了两次运算来计算结果,结果的每一倍进行一次运算。
在这种情况下,我们可以在每个双精度数上产生舍入误差,或者是避免这种误差的一种机制?
c++ ×3
.net ×1
algorithm ×1
avx ×1
biginteger ×1
c ×1
c# ×1
ieee-754 ×1
long-double ×1
modulo ×1
performance ×1
precision ×1
simd ×1
sse ×1
visual-c++ ×1
x86 ×1