問題タブ [bigint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 2進数を10進数に変換する最速の方法は?
符号なし 128 ビット整数をリトルエンディアン順で表す 4 つの符号なし 32 ビット整数があります。
この数値を 10 進文字列表現に変換し、ファイルに出力したいと思います。
現在、bigint_divmod10
関数を使用して数値を 10 で除算し、剰余を追跡しています。この関数を繰り返し呼び出して、数値がゼロになるまで余りを数字として出力します。かなり遅いです。これが最速の方法ですか?もしそうなら、私が見ていないこの機能を実装する賢い方法はありますか? GMP を調べてみましget_str.c
たが、かなり難解です。
編集: divmod10 関数について思いついた最速のコードは次のとおりです。
add 関数は次のように定義されます。
java - Java /ScalaBigInteger貼り付け
JavaBigInteger
クラスに問題があります。大きな値をに貼り付けることができませんBigInteger
。BigInteger
たとえば、次の番号にを割り当てたいとします。
コンパイラは整数と見なすため、直接割り当てることはできません。
しかし、私はそれをにしたいと思いますBigInteger
。これをソースコードに直接貼り付ける方法はありますか?
そのような方法がない場合、BigInt
クラスをはるかに使いやすいScalaに方法はありますか?
c# - C#のbigintに相当するものは何ですか?
SQL Serverデータベースにとって重要なC#の値を処理するときに何を使用する必要がありますか?
c++ - float を bigint に変換します (別名、バイナリ指数と仮数を取得するポータブルな方法)
C++ には、任意のサイズの整数を保持できる bigint クラスがあります。
大きな float または double の数値を bigint に変換したいと思います。私は作業方法を持っていますが、それは少しハックです。IEEE 754 数値仕様を使用して、入力数値の 2 進符号、仮数、および指数を取得しました。
コードは次のとおりです (Sign はここでは無視されますが、重要ではありません)。
動作しますが、かなり醜く、移植性がどの程度かわかりません。これを行うより良い方法はありますか?float または double からバイナリの仮数部と指数部を抽出する、より醜く移植性の低い方法はありますか?
答えてくれてありがとう。後世のために、frexp を使用したソリューションを次に示します。ループのために効率が低下しますが、float と double の両方で機能し、reinterpret_cast を使用せず、浮動小数点数表現の知識に依存しません。
c - bigintライブラリをどのように作成しますか/libgmpはどのように機能しますか?
さまざまなプラットフォームでのC用のBigIntライブラリの数とその使用方法を知っていますが、興味をそそられます。それらはどのように機能するのでしょうか。自分のライブラリを構築するにはどうすればよいでしょうか(試してみるつもりはありません。車輪の再発明をする意味はありませんが、それがどのように行われるかに興味があります)。手順/基本を説明する可能性のあるチュートリアルなどを誰かに教えてもらえますか?
ありがとう、
ナインフィンガー。
facebook - facebook connect uid mysqlストレージの問題
Facebook Connectの統合を行っています。Facebook php ライブラリを使用して uid を取得します。
$facebook = 新しい Facebook($api_key, $secret); $fb_user = $facebook->require_login();
$fbuser は、1000002949493949 などの 16 文字の bigint です。
ただし、この値をmysqlに挿入すると、2949493949のみが挿入されます
そのため、後で uid をデータベースに保存されている 1000002949493949 と一致させようとすると、データベースが 2949493949 を返しているため、一致しません。
私のデータベースの uid フィールドは、長さ 20 の bigint です。もともとは int でしたが、新しい長い uid に遭遇し始めたときに変更しました。
uidを正しく保存するために何をする必要があるか考えていますか?
math - MIPSの多倍長演算
ネイティブMIPSに多倍長演算を実装しようとしています。1つの64ビット整数がレジスター$12と$13にあり、別の整数がレジスター$14と$15にあると仮定します。合計はレジスター$10と$11に入れられます。64ビット整数の最上位ワードは偶数番号のレジスターにあり、最下位ワードは奇数番号のレジスターにあります。インターネット上では、これが可能な限り最短の実装であるとのことです。
正しく理解していることを再確認したいだけです。sltuは、2つの最下位ワードの合計がオペランドの1つよりも小さいか等しいかどうかをチェックします。この場合、キャリーが発生したよりも、これは正しいですか?
2つの最も重要な単語を追加するときにキャリーが発生したかどうかを確認し、結果を$ 9に格納するには、次のことを行う必要があります。
これは意味がありますか?
c++ - C++ BigInt 乗算の概念上の問題
私のプログラミング言語で使用するために、C++ で小さな BigInt ライブラリを構築しています。
構造は次のようなものです。
文字列を単一の文字に分割してdigits
.
桁の数字がすべて逆になっているため、数字の 123 は次のようになります。
私はすでに完全に機能する追加機能をコーディングすることができました。
次のように動作します。
(この場合、オーバーフローは 1 に 9 を足したときに起こることです: 10 から 10 を引き、オーバーフローに 1 を足し、オーバーフローは次の桁に足されます)
次のように、2 つの数値がどのように格納されるかを考えてみましょう。
上記digits
は、bigint 2 (A) と 100 (B) を表しています。
-
は初期化されていない数字を意味し、アクセスされません。
したがって、上記の数値を追加すると問題なく動作します: 0 から開始し、2 + 0 を追加し、1 に移動し、0 を追加し、2 に移動し、1 を追加します。
しかし:
上記の構造で乗算を実行したい場合、私のプログラムは次のようになります。
0 から開始し、2 に 0 を掛けて (eek)、1 に進みます。
したがって、乗算の場合、次のような順序を取得する必要があることは明らかです。
次に、すべてが明確になります: 0 から開始し、0 に 0 を乗算し、1 に移動し、0 に 0 を乗算し、2 に移動し、1 に 2 を乗算します。
digits
どうすれば掛け算の正しい形式に入ることができますか?- 配列の移動/反転はしたくありません - パフォーマンスが必要です!
sql-server - SQL Server 関連テーブルで主キーを GUID から BigInt に変更する方法
GUID 主キーを持つ 1000 万から 2000 万行の 2 つのテーブルと、少なくとも 12 のテーブルが外部キーを介して関連付けられています。ベース テーブルには、それぞれ 10 ~ 20 のインデックスがあります。
GUID から BigInt プライマリ キーに移行しています。誰かがアプローチに関する提案を持っているかどうか疑問に思っています。今考えている方法は次のとおりです。
- 関連するすべてのテーブルのすべてのインデックスと fkey を削除します。
- 各テーブルに「NewPrimaryKey」列を追加します
- 2 つのベース テーブルでキー ID を作成する
- データ変更のスクリプトを作成する "テーブル x を更新し、NewPrimaryKey = y を設定します。ここで、OldPrimaryKey = z
- 元の主キーの名前を「oldprimarykey」に変更します
- 「NewPrimaryKey」列の名前を「PrimaryKey」に変更します
- すべてのインデックスと fkey をスクリプトで戻す
これは良いアプローチのように思えますか? これに役立つツールまたはスクリプトを知っている人はいますか?
TD: 追加情報ごとに編集。GUID がプライマリである場合のアプローチに対処するこのブログ投稿を参照して ください。 /Default.aspx