我有两个字符串,都只包含数字.这些数字大于最大值uint64_t
.
我怎样才能添加这两个数字,然后将结果转换为字符串?
基于SSE浮点向量的减少,我试图对无符号长数组求和,但是很不幸,没有成功。
uint64_t vsum_uint64 (uint64_t *a, int n)
{
uint64_t sum; // lets say sum fits
__m128 vsum = _mm_set1_ps(0);
for (int i = 0; i < n; i += 2) { // 2 unit64 in single __m128
__m128 v = _mm_loadl_epi64(&a[i]);
vsum = _mm_add_epi64(vsum, v);
}
_mm_store_ss(&sum, vsum);
uint64_t *p = &vsum;
sum+=*(p+1);
// vsum = _mm_hadd_ps(vsum, vsum);
// vsum = _mm_hadd_ps(vsum, vsum);
return sum;
}
Run Code Online (Sandbox Code Playgroud)
这应该是正确的,但是gcc仍然无法编译它。我搜索了答案,但没有找到答案。
这就是gcc所说的:
main.cpp: In function ‘uint64_t vsum_uint64(const uint64_t*, int)’:
main.cpp:73:35: …
Run Code Online (Sandbox Code Playgroud) 我有一个变量 ,DifferenceAmt
它是一个小数。它可以是负数,也可以是正数。我需要将 的值DifferenceAmt
作为字符串输出,但如果它是负数,则不带负号。我知道如何通过首先检查是否DifferenceAmt
小于零来删除负号,然后如果是,则从第二个字符执行子字符串,但这似乎很麻烦。我先尝试转换DifferenceAmt
为 UInt64,
UInt64 differenceamt = (UInt64)DifferenceAmt;
Run Code Online (Sandbox Code Playgroud)
但我不断收到一条错误消息,指出该数字对于 UInt64 来说太大(例如,即使它是 -10)。我怎样才能做到这一点?
当从大的uint64_t值转换为double时。结果并不如预期。这是为什么,有办法解决吗。我正在使用 gcc 8.3.0
int main
{
uint64_t var64 = 844421103279395000;
printf("var64 = %llu\n", var64 );
double varDouble = (double)var64;
printf("varDouble = %lf\n", varDouble );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
var64 = 844421103279395000
varDouble = 844421103279394940.000000
Run Code Online (Sandbox Code Playgroud) 考虑以下用C++ 11编写的代码:
#include <iostream>
#include <bitset>
#include <cstdint>
int main() {
std::uint64_t a = 0000000000000000000000000000000000000000000000001111111100000000;
std::bitset<64> b(a);
std::cout << b << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码的输出是:
0000000000000000001001001001001001001001000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
为什么此输出与a
值不对应?
我有以下代码,只是检查uint64_t是否是偶数,我打算使用按位AND操作来检查,但它似乎没有工作.
这是我认为首先工作的代码:
int n;
scanf("%d",&n);
for(int i = 0; i < n; i++){
uint64_t s,d;
scanf("%llu %llu",&s,&d);
//try for x
uint64_t x;
bool stop = false;
x = s + d;
printf("%llu",x&1ULL); \\ This prints 0 when the number is even but
if(x&1ULL==0ULL){ \\ This check always returns false
printf("%llu",x);
x/= 2;
Run Code Online (Sandbox Code Playgroud)
如果数字是奇数或偶数,则此代码始终打印输出0或1,但if语句始终返回false.我究竟做错了什么?谢谢
我对 C++ 很陌生,我正在尝试创建一个数组,其中每个元素都有特定的位大小。我尝试过这样做:\nSequence<uint64_t>;
\n其中 Sequence 是数组名称,每个元素的大小为 64 位。但是出现以下错误:“错误:\xe2\x80\x98Sequence\xe2\x80\x99 未命名类型”\n提前致谢!
我正在尝试将有限域 CPU 代码移植到 GPU 上,在此过程中,我想生成随机向量来测试函数的速度。
我需要两个随机向量uint64_t
(以及相应的两个 double 向量,具有有限域元素的浮点表示),每个向量的大小为 N。 据我所知,uint64_t 类型在 GPU 上不受本机支持,并且使用两个 32- 进行模拟位寄存器。
这些向量将包含 (0, p-1) 范围内的整数,其中 p 是素数,例如 (1<<25) - 39。(这个素数使用 25 位,但我仍然需要 64 位,来存储中间结果在剩余之前)。
我试图理解 Curand API 并用它生成随机向量。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <cuda.h>
#include <time.h>
#include <curand.h>
int main() {
uint64_t p = (1 << 25) - 39;
const uint32_t N = (1 << 27);
uint64_t *au;
double *ad;
cudaError_t handle;
handle = cudaMallocManaged(&au, N*sizeof(uint64_t));
handle = cudaMallocManaged(&ad, N*sizeof(double));
curandGenerator_t gen_type; …
Run Code Online (Sandbox Code Playgroud) 我需要使用uint64_t
asunsigned long long int
因为我需要适应比unsigned long
它更大的数字?(两个操作系统都是 64 位),我该如何解决这个问题?这是实现二进制除法的代码: 这是我尝试打印以查看最终函数结果的函数:
void binary_div(s21_big_decimal *value_1, s21_big_decimal value_2, s21_big_decimal *result) {
init_s21_decimal(result);
s21_big_decimal Q;
s21_big_decimal R;
int scaleDiv = -1;
do {
init_s21_decimal(&R);
init_s21_decimal(&Q);
scaleDiv++;
int lastBit = (SIZE_BIG_DECIMAL - 1) * 32 - 1;
int currentBit = get_bit_big(*value_1, lastBit);
while (currentBit == 0 && lastBit >= 0) {
currentBit = get_bit_big(*value_1, lastBit);
if (currentBit == 0) lastBit--;
}
for (int i = lastBit; i >= 0; i--) { …
Run Code Online (Sandbox Code Playgroud) 我在做: -
Decimal production = 0;
Decimal expense = 5000;
Decimal.ToUInt64(production - expense);
Run Code Online (Sandbox Code Playgroud)
但它会引发异常并显示以下错误消息。
"Value was either too large or too small for a UInt64"
有人可以给我一个解决方法吗?
谢谢!
无论如何,我希望结果为正数。
我试图理解为什么uint64_t
类型无法正常显示pow(2,64)-1
.cplusplus标准是199711L.
我检查了pow()
C++ 98标准下的函数
double pow (double base , double exponent);
float pow (float base , float exponent);
long double pow (long double base, long double exponent);
double pow (double base , int exponent);
long double pow (long double base, int exponent);
Run Code Online (Sandbox Code Playgroud)
所以我写了下面的代码片段
double max1 = (pow(2, 64) - 1);
cout << max1 << endl;
uint64_t max2 = (pow(2, 64) - 1);
cout << max2 << endl;
uint64_t max3 = -1;
cout << max3 << …
Run Code Online (Sandbox Code Playgroud) 用 解析 uint64 最大值时这是正常行为strconv.ParseInt
吗?
i, err := strconv.ParseInt("18446744073709551615", 10, 64)
fmt.Println(i, err)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:"strconv.ParseInt: parsing "18446744073709551615": value out of range"
当 uint64 的最大允许值为:18446744073709551615
你能解释这种行为吗?